脚本中出现 window.open() access is denied - 拒绝访问 情况一则及分析
2015-06-08 16:08
295 查看
也许这个状况有的朋友已经知道了,但我还是把自己的分析思路写下来给其他的朋友参考。
昨天把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)。最终简化如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!-- saved from url=(0053)http://blog.csdn.net/BlueDestiny/category/184440.aspx --> <HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>never-online 's Tech Blog In CSDN - JS & DHTML</TITLE>
<META content="MSHTML 6.00.2800.1400" name=GENERATOR> <META http-equiv=Content-Type content="text/html; charset=utf-8"> <script type="text/javascript"> function addEvent(o,w,f) { if (document.all) { o.attachEvent('on'+w, f); } else { o.addEventListener(w,
f, false); } } function fnRunHtmlCode(obj) { var wnd = window.open('', '', ''); }; function fnReadyToRunHTMLcode() { insertRunHtmlBtn(document.getElementById("demo")); function insertRunHtmlBtn(obj) { var wrapper = document.createElement("DIV"); wrapper.style.margin="10px
0 10px 0"; var runBtn = document.createElement("INPUT"); runBtn.type = "button"; runBtn.value = "Run HTML Code"; addEvent(runBtn, "click", function() { fnRunHtmlCode(obj) }); obj.parentNode.insertBefore(wrapper, obj.nextSibling); wrapper.appendChild(runBtn);
} //} catch (ex) {} } onload = fnReadyToRunHTMLcode; </script> <div class="postText"> <textarea class="code_textarea" id="demo"> </textarea> </div> </body> </html>
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]
运行依然如故。
于是再把DTD去掉。
<HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>never-online 's Tech Blog In CSDN - JS & DHTML</TITLE> <META content="MSHTML 6.00.2800.1400" name=GENERATOR> <META http-equiv=Content-Type content="text/html; charset=utf-8"> <script type="text/javascript">
function addEvent(o,w,f) { if (document.all) { o.attachEvent('on'+w, f); } else { o.addEventListener(w, f, false); } } function fnRunHtmlCode(obj) { var wnd = window.open('', "_blank", ''); wnd.document.open('text/html', 'replace'); wnd.document.writeln(obj.value);
wnd.document.close(); }; function fnReadyToRunHTMLcode() { insertRunHtmlBtn(document.getElementById("demo")); function insertRunHtmlBtn(obj) { var wrapper = document.createElement("DIV"); wrapper.style.margin="10px 0 10px 0"; var runBtn = document.createElement("INPUT");
runBtn.type = "button"; runBtn.value = "Run HTML Code"; addEvent(runBtn, "click", function() { fnRunHtmlCode(obj) }); obj.parentNode.insertBefore(wrapper, obj.nextSibling); wrapper.appendChild(runBtn); } //} catch (ex) {} } onload = fnReadyToRunHTMLcode; </script>
<div class="postText"> <textarea class="code_textarea" id="demo"> </textarea>
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]
运行正常~~~知道原因所在了。
<!-- 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>
昨天把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)。最终简化如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!-- saved from url=(0053)http://blog.csdn.net/BlueDestiny/category/184440.aspx --> <HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>never-online 's Tech Blog In CSDN - JS & DHTML</TITLE>
<META content="MSHTML 6.00.2800.1400" name=GENERATOR> <META http-equiv=Content-Type content="text/html; charset=utf-8"> <script type="text/javascript"> function addEvent(o,w,f) { if (document.all) { o.attachEvent('on'+w, f); } else { o.addEventListener(w,
f, false); } } function fnRunHtmlCode(obj) { var wnd = window.open('', '', ''); }; function fnReadyToRunHTMLcode() { insertRunHtmlBtn(document.getElementById("demo")); function insertRunHtmlBtn(obj) { var wrapper = document.createElement("DIV"); wrapper.style.margin="10px
0 10px 0"; var runBtn = document.createElement("INPUT"); runBtn.type = "button"; runBtn.value = "Run HTML Code"; addEvent(runBtn, "click", function() { fnRunHtmlCode(obj) }); obj.parentNode.insertBefore(wrapper, obj.nextSibling); wrapper.appendChild(runBtn);
} //} catch (ex) {} } onload = fnReadyToRunHTMLcode; </script> <div class="postText"> <textarea class="code_textarea" id="demo"> </textarea> </div> </body> </html>
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]
运行依然如故。
于是再把DTD去掉。
<HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>never-online 's Tech Blog In CSDN - JS & DHTML</TITLE> <META content="MSHTML 6.00.2800.1400" name=GENERATOR> <META http-equiv=Content-Type content="text/html; charset=utf-8"> <script type="text/javascript">
function addEvent(o,w,f) { if (document.all) { o.attachEvent('on'+w, f); } else { o.addEventListener(w, f, false); } } function fnRunHtmlCode(obj) { var wnd = window.open('', "_blank", ''); wnd.document.open('text/html', 'replace'); wnd.document.writeln(obj.value);
wnd.document.close(); }; function fnReadyToRunHTMLcode() { insertRunHtmlBtn(document.getElementById("demo")); function insertRunHtmlBtn(obj) { var wrapper = document.createElement("DIV"); wrapper.style.margin="10px 0 10px 0"; var runBtn = document.createElement("INPUT");
runBtn.type = "button"; runBtn.value = "Run HTML Code"; addEvent(runBtn, "click", function() { fnRunHtmlCode(obj) }); obj.parentNode.insertBefore(wrapper, obj.nextSibling); wrapper.appendChild(runBtn); } //} catch (ex) {} } onload = fnReadyToRunHTMLcode; </script>
<div class="postText"> <textarea class="code_textarea" id="demo"> </textarea>
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]
运行正常~~~知道原因所在了。
<!-- 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>
相关文章推荐
- CentOS7下 libvirt+virt-manager 虚拟机迁移配置及错误处理
- Linux 时间修改--date -s命令
- Linux shell if判断语句
- linux下GBK->UTF-8文件编码批量转换脚本
- linux的环境变量问题
- centos6.5安装mysql5.6
- linux文件是否被当前进程外的其他进程打开
- linux -- 查看ip,路由,dns
- 不同tomcat使用不同JDK
- Linux ipcs命令与ipcrm命令的用法详解
- linux下的一些强力工具和桌面环境
- linux一些较为常用的发行版本
- Windows下安装Nginx
- 央视公然诽谤Linux操作系统,谁报告?
- 公司人员架构重要性
- linux(CentOS7)安装cuda
- linux 模块编程
- Openwrt常用烧写命令 (tftp)
- Linux中根据主机名获取其在局域网中的IP地址
- 动态配置脚本实现之 链接库方法提取