Я пишу плагин jQuery, который должен иметь возможность запускать элементы DOM в iFrame. Я просто тестирую это локально прямо сейчас (т.е. Url is file://.../example.html), а в Chrome я продолжаю бить "SecurityError: не удалось прочитать свойство contentDocument из" HTMLIFrameElement ": заблокирован кадр с источником" null "от доступа к кадру с перекрестным началом". и в Safari я просто получаю пустой документ.
Учитывая, что как родительский файл, так и файл iFrame сходят с моего локального диска (в разработке) и будут сходить с того же сервера (в процессе производства), я бы подумал, что я не буду подвержен кресту -оригина.
Есть ли способ убедить браузер, что мои локальные файлы на самом деле одного домена?
<aside> Интересно, что в Safari, используя консоль напрямую, я могу ввести $("iframe").get(0).contentDocument.find("ol")
, и он счастливо находит мой список. В Chrome эта же строка выдает ошибку безопасности так же, как если бы она выполнялась. </aside>
Обновление
Основываясь на приведенных ниже предложениях, я запустил простой локальный веб-сервер, чтобы проверить это, и теперь я не получаю ошибку перекрестного происхождения - yay - но я тоже не получаю никакого контента.
Мой Javascript выглядит как
$(document).ready(function(){
var myFrame = $("iframe"),
myDocument = $(myFrame.get(0).contentDocument),
myElements;
myDocument.ready(function(){
myElements = myDocument.find("ul, ol");
console.debug("success - iFrame", myFrame, "document", myDocument, "elements", myElements);
});
});
myDocument.ready
существует только для того, чтобы документ iFrame был готов - на самом деле это не имеет значения.
Я всегда заканчиваю тем, что myElements
пуст. ([]
в сафари или jQuery.fn.init[0]
в Chrome)
Но если я вручную наберу это в консоли:
$($("iframe").get(0).contentDocument).find("ol, ul")
Я получаю свои списки, как ожидалось. Теперь это происходит как в Safari, так и в Chrome.
Итак, мой вопрос: почему мой script не видит элементы DOM, а тот же код при вводе непосредственно в консоль браузера может с радостью видеть элементы DOM?