Mobyfy.js — открытая библиотека, предназначенная прежде всего для облегчения создания отзывчивых (responsible) сайтов. Основная фишка состоит в так называемом «Capturing API» — позволяющем модифицировать DOM непосредственно ДО начала загрузки ресурсов (скриптов, изображений и т.д.)
Вот пример работы с отзывчивыми изображениями:
<picture>
<source src="/examples/assets/images/small.jpg">
<source src="/examples/assets/images/medium.jpg" media="(min-width: 450px)">
<source src="/examples/assets/images/large.jpg" media="(min-width: 800px)">
<source src="/examples/assets/images/extralarge.jpg" media="(min-width: 1000px)">
<img src="/examples/assets/images/small.jpg">
</picture>
Файл «small.jpg» не будет загружен на клиенте с большим экраном, вместо него загрузится то, что будет соответствовать медиа-критерию (можете проверить в веб-инспекторе на закладке «сеть»).
Пример кода, подменяющий все изображения на странице:
<script id="main-executable" class="mobify">
var main = function () {
var capturing = window.Mobify && window.Mobify.capturing || false;
if (capturing) {
// Grab reference to a newly created document
Mobify.Capture.init(function(capture){
var capturedDoc = capture.capturedDoc;
var grumpyUrl = "/mobifyjs/examples/assets/images/grumpycat.jpg"
var imgs = capturedDoc.getElementsByTagName("img");
for(var i = 0; i < imgs.length; i++) {
var img = imgs[i];
var ogImage = img.getAttribute("x-src");
img.setAttribute("x-src", grumpyUrl);
img.setAttribute("old-src", ogImage);
}
// Render source DOM to document
capture.renderCapturedDoc();
});
}
}; main();
</script>
Принцип работы довольно интересен: на странице в начало тега HEAD вставляется скрипт, временно оборачивающий содержимое BODY в тег PLAINTEXT — это предотавращает загрузку рессурсов. Далее выполняется наш код, манипуляции с DOM, ну а в конце BODY восстанавливается и ресурсы грузятся.
Поддержка браузерами:
- Webkit (Safari, Chrome, etc) — все версии
- Firefox 4.0+
- Opera 11.0+
- Internet Explorer 10+
Официальный сайт, интересное обсуждение на сайте мозилы — в комментариях есть разъяснение технологии.
Автор: zag2art