DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> JavaScript基礎知識 >> 腳本中出現 window.open() access is denied - 拒絕訪問 情況一則及分析
腳本中出現 window.open() access is denied - 拒絕訪問 情況一則及分析
編輯:JavaScript基礎知識     
也許這個狀況有的朋友已經知道了,但我還是把自己的分析思路寫下來給其他的朋友參考。

昨天把blog頁面另存在,在本地調試和改blog皮膚。

簡介:
我想在onload頁面加載完時用腳本控制,把Run HTML code, CopyCode, SaveCode這三個按扭動態的添加到css類名為code_textarea的多行文本框裡。

狀況描述:
在非服務器端(即沒有在本地服務器下調試)按扭已經全部出現在多行文本框下,但在調試腳本時(點擊Run HTML code),出現拒絕訪問...服務器下調試正常。

分析:
查看代碼,發現是這裡腳本出錯,代碼如下:
function fnRunHtmlCode(obj)
{
//try {
//if (typeof(obj)=="string") obj=document.getElementById(obj);
var wnd = window.open('', "_blank", '');
wnd.document.open('text/html', 'replace');
wnd.document.writeln(obj.value);
wnd.document.close();
//} catch(ex) { alert(ex.message) };
};
用Mozilla打開,運行正則,並且腳本沒有任何錯誤。弄了將半個小時,我把其余的代碼都刪了,在Mozilla中把動態生成的div和button代碼copy出來察看,把在IE上動態加載的button拷貝到dw裡看,沒有異常。包括把上面的function放在另外一個頁面上運行,依然是正常,並把這個function單獨改成了window.open('','','')還是拒絕訪問。

既然是拒絕訪問,一般情況下肯定是跨域了,但本地調試,沒有加其它的代碼呀,怎麼跨域?百思不得其解。
於是想先放上blog再說了。奇怪的是放上服務器又可以了,於是我把本地的頁面放到本地服務器下運行,也是正常。這回就更蹊跷了。說是IE bug?不成立,因為服務器可以運行。代碼問題?不成立,因為在其它頁面正常,而且沒有涉及到其它的代碼。只是funtion,說明肯定是下載的這頁有問題,難道CSDN blog輸出的HTML頁有document.domain類似的代碼嗎?

分步調試成功:
把原先所有的代碼不需要的地方全部去掉(包括Html)。最終簡化如下: 


[Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]

運行依然如故。
於是再把DTD去掉。


[Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]

運行正常~~~知道原因所在了。
<!-- saved from url=(0053)http://blog.csdn.net/BlueDestiny/category/184440.aspx -->
這句害我找了半天的原因,總算刨它出來了,證明這句另存為的代碼在IE下是會有跨域存在的,而Mozilla對這句沒有任何反應。

後記:
對於另存為出現的注釋代碼
<!-- saved from url=....-->
放在HTML任何部分,在本地非服務器端調試都會有拒絕訪問的錯誤,而Mozilla不會。如:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>
<!-- saved from url=(0053)http://blog.csdn.net/BlueDestiny/category/184440.aspx -->
<input type="button" value="run" onclick="window.open('','','')"/>
</body>
</html>
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved