Загружайте jQuery только один раз на многокадровую страницу - PullRequest
1 голос
/ 30 июня 2011

Ключевой экран в моем приложении включает HTML-страницу с несколькими iframe, выполняющими различные функции. Все это потребует доступа к jQuery. В целях ускорения времени загрузки и сокращения трафика HTTP (хотя я знаю, что кеширование может помочь в этом), было бы хорошо, если бы сам код jQuery загружался только один раз. Если моя страница похожа на

<html>
   <head>
      <script src="jquery-1.5.js" type="text/javascript"></script>
   </head>
      <body>
         <iframe src="other.html"></iframe>
         <div id="foo"> ... stuff here ... </div>
      </body>
</html>

Тогда внутри other я могу сослаться на parent.$('#foo'), но это будет относиться к элементу "foo" родителя, а не к дочернему элементу. Есть ли способ использовать родительский «экземпляр» jQuery для дочернего документа или элементов в нем?

Ответы [ 3 ]

3 голосов
/ 30 июня 2011

Вы пробовали:

var $ = window.parent.$;
$('#foo'); // parent's frame's #foo, is the same as "window.parent.$('#foo');"

и

var $ = window.parent.$;
$('#foo', document); // this frame's #foo because the current document is given as context
3 голосов
/ 30 июня 2011

Убедитесь, что каждый IFRAME ссылается на одну и ту же версию jquery. Он должен загружаться только один раз и кэшироваться браузером. IFRAMES не имеют доступа к сценариям своих родителей.

Вы также можете рассмотреть возможность использования CDN для Jquery (например, CDN Google ) для повышения производительности.

0 голосов
/ 01 августа 2017

Мы решили это с:

var window.jQuery = window.$ = function( selector, context ) {
    return window.parent.jQuery(selector, context?context:window.document)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...