我在頁面上顯示若干個iframe,它向用戶顯示
廣告
獨角獸/培根。因爲它不可能通過父檢測iframe的domready中的事件(請讓我知道這是不是真的)我有一些初始化代碼在每個IFRAME這樣的:查找在其父代中調用函數的iframe
<body data-controller="unicorn">
<!-- content -->
<script>
var $ = parent.jQuery;
if($ && $.frameReady){
$(document).ready(function(){
$.frameReady(document);
});
}
</script>
</body>
的parent
document
有代碼非常類似於以下(通過@保羅愛爾蘭about this technique):
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);
};
下面是一個example in jsfiddle(you can edit it here)。它工作得很好(至少它在Chrome開發中)。
現在我想要做的是擺脫在iframe的data-controller
位,轉而使用id
(或data-*
或其他)是父文檔初始化代碼中的實際IFRAME元素。
如果我可以通過DOMWindow
查詢DOM它應該是這樣的:
$.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)。
因爲S.O.應答者喜歡它,當一個問題有一個問題,那就是:
有沒有(有效的)的方式來查詢通過基於WebKit的瀏覽器document
或window
的DOM - 包括Adobe AIR 2.5?
+1獨角獸/培根獨角獸一個iframe中。至少它與* ads *無關......) – 2011-01-21 15:31:50