У меня есть несколько фреймов на странице, которые отображают рекламу единорогов / бекон для пользователей.Поскольку невозможно определить событие domready iframe через родительский (пожалуйста, дайте мне знать, если это не так), у меня есть некоторый код инициализации в каждом iframe, подобный этому:
<body data-controller="unicorn">
<!-- content -->
<script>
var $ = parent.jQuery;
if($ && $.frameReady){
$(document).ready(function(){
$.frameReady(document);
});
}
</script>
</body>
parent
document
имеет код, очень похожий на следующий ( об этой технике через @Paul Irish):
var frames = {
// the following is irrelevant to my question but awesome.
"unicorn": function (document) {
var script = document.createElement("script"),
element = document.getElementsByTagName("script")[0];
script.src = "http://www.cornify.com/js/cornify.js";
script.onload = function () {
// defaultView is the DOMWindow.
document.defaultView.cornify_add();
$(document).click(document.defaultView.cornify_add);
script.parentNode.removeChild(script);
};
element.parentNode.appendChild(script, element);
},
"bacon" : function(document) { /** mmm, bacon **/ }
};
// relevant but boring...
$.frameReady = function(document){
var controller = $(document.body).data("controller");
controller && frames[controller] && frames[controller](document);
};
Вот пример в jsfiddle ( Вы можете редактировать это здесь ).Он отлично работает (по крайней мере, в Chrome dev).
Теперь мне хотелось бы избавиться от бита data-controller
в iframe и вместо этого использовать id
(или data-*
).или что-то еще) фактического элемента iframe, который находится в родительском документе для инициализации кода.
Если бы я мог запросить DOM через DOMWindow
, это выглядело бы так:
$.frameReady = function(document){
var iframe = $("body").find(document.defaultView),
controller = iframe.data("controller");
controller && frames[controller] && frames[controller](document);
};
К счастью, мне это нужно только для работы в браузерах на основе webkit, на самом деле в Adobe Air 2.5 (но я тестирую в Chrome ATM).
Потому что SO, отвечающие на вопросы, любят, когда у Вопроса возникает вопрос:1030 *
Существуют ли (эффективные) способы запроса DOM через document
или window
в браузерах на основе webkit, включая Adobe Air 2.5?