$ не определен в iFrame - PullRequest
12 голосов
/ 13 мая 2011

У меня есть страница с iframe. моя страница iframe - iframe.php, а моя главная страница - main.php, когда я непосредственно загружаю iframe.php, мой код jquery выполняется нормально, но когда я загружаю main.php (который содержит iframe.php в качестве iframe), я получаю сообщение об ошибке " $ не определено ".

это может быть связано с тем, что main.php и iframe.php используют

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>

если да, как я могу использовать jquery на странице iframe, не включая эту строку?

Ответы [ 4 ]

15 голосов
/ 15 мая 2011

Я понял это.В iFrame я использовал

var $ = parent.$;

, а также предоставлял любые jquery-вызовы документа для контекста.то есть

$("#element", document).doStuff();

Это странно, потому что оригинальный способ (с jquery, включенным на обеих страницах) работал нормально в Safari для Mac, но в Firefox он выдавал ошибку

Ошибка: c.defaultView.getComputedStyle (h, null) является нулевым Исходный файл: http://code.jquery.com/jquery-latest.pack.js Строка: 16

3 голосов
/ 17 января 2013

Я загружал iframe на веб-страницу, и я мог найти $ object, используя

var $ = parent.$;

, но при этом не выполнялся выбор элементов iFrame.Ниже приведен код для выполнения селектора в теле iFrame

if (typeof(jQuery) == "undefined") {
    var iframeBody = document.getElementsByTagName("body")[0];
    var jQuery = function (selector) { return parent.jQuery(selector, iframeBody); };
    var $ = jQuery;
}

Каким-то образом объект документа также был undefined.

Источник вышеуказанного кода: https://gist.github.com/843229

Надеждаэто кому-то помогает.

2 голосов
/ 14 мая 2011

Плохие новости - вы не можете использовать Jquery, если это не указано в документе. Таким образом, вам придется загрузить его в любом случае.

Нет ничего страшного в том, чтобы включить вызов jquery в оба документа. У меня есть несколько клиентов, которые составляют часть приложения моей компании для автоматизации маркетинга (в которое он включен), а также имеют Jquery, включенный в родительский документ, и это прекрасно работает без каких-либо конфликтов. С точки зрения загрузки, если вы правильно настроили, попадание будет незначительным из-за кэширования. Итак, включи прочь.

Практическое правило для iFrames ... воспринимайте их как отдельные страницы на вашей странице. Да, в некоторых случаях все переносится, но модель происхождения документа предотвращает пересечение таких вещей, как CSS, между родителем и потомком.

0 голосов
/ 21 ноября 2017

Обновление до новой версии, например https://code.jquery.com/jquery-2.1.3.min.js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...