2011-03-17 17 views
2

當我嘗試我的代碼了:谷歌瀏覽器不會接受.contentDocument或.contentWindow!

Testing.html -

<script language="JavaScript" type="text/javascript"> 
function find() { 
var iframeEl = document.getElementById('love'); 
if (iframeEl.contentDocument) { 
    var form = iframeEl.contentDocument.document.getElementById('hi').getAttribute('href'); 
    alert(form) 
} else if (iframeEl.contentWindow) { 
    var form = iframeEl.contentWindow.document.getElementById('hi').getAttribute('href'); 
    alert(form) 
} 
    } 
</script> 
<body onload="find()"> 
<iframe name="lovez" src="frame.html" id="love"><a href="http://www.google.com" id="hi">Testingz</a></iframe> 
</body> 

Frame.html -

<a href="http://www.google.com" id="hi">Testing</a> 

它不會返回一個警告框。但是在Internet Explorer上它會。我一直在尋找互聯網,嘗試所有的例子,並找不到一個簡單的例子,可以在Google Chrome中使用。我做錯了什麼,或者它只是谷歌瀏覽器?

回答

1

嘗試沒有.document

var form = iframeEl.contentDocument.getElementById('hi').getAttribute('href'); 

,而不是

var form = iframeEl.contentDocument.document.getElementById('hi').getAttribute('href'); 
+0

這不工作以太。 – jhfire 2011-03-17 19:33:55

+0

它適用於我在Chrome 10.0.648.133 – Cida 2011-03-18 01:59:57

+0

使用調試器,我可以在屏幕上看到iframe,但contentWindow和contentDocument屬性都未定義。 – 2012-08-08 21:08:23

3

我注意到,無論是contentDocumentgetSVGDocument(從SVG文件SVG對象)會如果代碼工作正常來自Web服務器,但是當我將代碼複製到本地文件時,它不起作用。

Here's a sample link與代碼我coppied從網絡上,但不是從我的磁盤上工作。

Here's the solution我剛剛從Chrome中找到(感謝Artem S),即使用了--allow-file-access-from-files標誌。

+0

注意:上述鏈接中的解決方案在引號內部有標記。這給了我錯誤。當我把國旗放在引號之外時,它終於奏效了。 – 2016-04-24 01:01:29

0

來自@IsraelGav的答案是正確的,即當從本地文件訪問代碼時發生此問題,但從Web服務器訪問時不會發生此問題。從這個意義上說,使用--allow-file-access-from-files標誌可以允許Chrome訪問本地文件也是正確的。

但是,這裏忽略了一個重要的安全問題。關注以及替代可能的解決方案最初都在this other SO answer by @orszaczky中描述。總結替代解決方案:在Windows上,安裝http-server(npm install -g http-server)並從項目目錄運行http-server。在Mac/Linux上,從本地目錄運行python -m SimpleHttpServer。您現在可以在瀏覽器中訪問本地託管的網站。在Windows上,我必須使用localhost:8080,而在Mac上我必須使用localhost:8000

順便說一句,這不僅是Windows和Mac上的Chrome(v49.0)的問題,也是Opera(v35.0)的問題。