2014-02-05 112 views
5

我正在嘗試通過創建一個iframe並使用javascript或vbscript動態構建iframe內容來構建在Internet Explorer中使用的測試頁。我通常會使用data:URI,但是IE會阻止它。如何在沙盒iframe(IE11)中使用JavaScript創建iframe內容?

示例。

<iframe sandbox="allow-scripts" src="javascript:document.write('test')"></iframe> 

似乎IE是不會允許我通過一個javascript打造的iframe內容唯一的瀏覽器:()函數的src,即使允許的腳本沙箱屬性設置。我不想在iframe和父窗口之間傳遞任何信息,也不想讓allow-same-origin集合,因爲它幾乎無法達到擁有沙盒iframe的目的。

除了javascript或data:URI之外,還有其他方法可以動態構建iframe或data:URI,還是通過父窗口中的javascript,因爲由於相同的原始限制,它不適用於沙盒iframe?我也不想從外部頁面設置內容。

+0

可能重複( http://stackoverflow.com/questions/16906859/cant-write-to-iframe-in-ff-or-ie-only-chrome) –

回答

0

javascript:是一種奇怪的URI協議。它在的某些上下文中工作,如<a href>,但不是全部 - 例如,窗口的位置不能設置爲這樣的URI。 (雖然你可以指定一個javascript: URI來window.location運行一個腳本的一個非常迂迴的方式,窗口的位置不會保持設置爲該值。)

將內容寫入到一個IFRAME,獲取到幀的一個參考文件並寫入它。這樣做需要您設置沙箱標誌allow-same-origin

<iframe id="myframe" sandbox="allow-scripts allow-same-origin" src="about:blank"></iframe> 

var frame = document.getElementById("myframe"); 
var fdoc = frame.contentDocument; 

fdoc.write("Hello world"); // or whatever 

直播例如:http://jsfiddle.net/wUvrF/1/

+2

javascript:可以用作所有iFrame的src屬性中的URI只要未設置sandbox屬性或設置爲allow-scripts,但IE中只允許使用IE或允許使用同一源碼。看起來,這是一個問題,因爲沙盒iframe是一個獨特的域,它將使我無法通過父文檔上的腳本對其進行修改。將iFrame設置爲允許在沙箱屬性中使用相同的來源,這就會破壞iFrame的沙箱目標,因此它不是我嘗試測試的可行選項。 – user3276899

+0

您可以在某處選擇某個選項,以允許您從Chrome/Safari中的地址欄運行JavaScript網址。 – bjb568

+0

這是沙箱嗎? – bumpkin

0

HTML5定義用於此目的的 「srcdoc」 屬性

<iframe seamless sandbox srcdoc="<p>Yeah, you can see it <a href=&quot;/gallery?mode=cover&amp;amp;page=1&quot;>in my gallery</a>."></iframe> 
的[無法寫入在FF或IE,只有鉻設置爲iFrame]
+1

Internet Explorer不支持srcdoc屬性,因此不適用於我正在嘗試執行的操作。雖然它在支持它的其他瀏覽器中很有用,但我已經有方法使用src屬性中的數據或javascript URI來動態創建iframe源代碼。不幸的是我需要一些在IE中可用的東西。 – user3276899