2016-06-21 52 views
0

對混淆標題的道歉。

我有一個友好的iframe在其中的網頁,並且iframe中包含一個腳本標記。本質上,它看起來像這樣:

<iframe src="Javascript:'<div id=\'target\'></div><script src=\'appendStuff.js\'><\/script>'"></iframe> 

appendStuff.js負荷的jQuery上document,然後做類似下面的操作:

doc = document; // the iframe's document 
$('<h1>Loaded!</h1>').appendTo('#target', doc); 

這一切正常。但是,爲了修復appendStuff.js中的另一個bug,我們需要移動jQuery並將其加載到window.top.document上,而不是在iframe中的document

現在,.appendTo('#target', doc)調用靜靜地失敗,沒有任何東西被追加。

這是令人難以置信的混淆,因爲只選擇$('#target', doc)似乎工作得很好。

有誰知道這是否真的被打破,如果我做錯了什麼,或者有什麼辦法解決這個問題?

+0

appendTo接收單個參數。可能你需要'$('

加載!

').appendTo($('#target',doc));' –

+0

@AlexKudryashev這是問題!非常感謝。如果你把它寫成答案,我會接受它。 – Mordred

回答

0

jQuery在文檔準備就緒。當你說「修復appendStuff.js中的另一個bug」時,我的第一個猜測是,那些代碼試圖在文檔準備好之前運行,因此在jQuery本身被加載之前就有問題了。當你嘗試手動選擇$('#target',doc) - 在控制檯中,我認爲 - 你在頁面加載完成後做這件事,因此在文檔準備就緒後。

所以首先看看你的appendStuff.js。猜測,你應該用$(function(){...})包裝它;以解決您的加載順序問題。你也應該看看How can I detect whether an iframe is loaded?How to check if iframe is loaded or it has a content?,因爲它聽起來像你真的應該擁有所有這些父母的邏輯,而不是將它鎖在iframe中。

+0

不幸的是,沒有問題。所有東西都已經打包好等待文檔準備就緒。是的,我在控制檯中測試了這些代碼,但它在實際源代碼的下一行也可以正常工作。顯然,如果我可以放在那裏,它將全部放在父項中,但appendStuff.js實際上是由其他網站加載的,並且通常是在iframe中加載,這是我們現在處於的狀態。我也會用這些信息更新我的問題。 – Mordred

相關問題