当前位置: 首页 > 图文教程 > 网络编程 > Javascript > 脚本中出现 window.open() access is denied - 拒绝访问 情况一则及分析

Javascript
jquery 操作单选框,复选框,下拉列表实现代码
js 数组实现一个类似ruby的迭代器
JavaScript 组件之旅(一)分析和设计
JavaScript 组件之旅(二)编码实现和算法
JavaScript 组件之旅(三):用 Ant 构建组件
JavaScript 组件之旅(四):测试 JavaScript 组件
小议javascript 设计模式 推荐
浅谈javascript 面向对象编程
javascript 时间比较实现代码
js apply/call/caller/callee/bind使用方法与区别分析
JavaScript 全角转半角部分
jquery 选择器部分整理
Firebug 字幕文件JSON地址获取代码
jQuery 判断元素上是否绑定了事件
javascript实现的距离现在多长时间后的一个格式化的日期
javascript 面向对象,实现namespace,class,继承,重载
javascript 通过封装div方式弹出div窗体
JScript 脚本实现文件下载 一般用于下载木马
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
网页禁用右键实现代码(JavaScript代码)

Javascript 中的 脚本中出现 window.open() access is denied - 拒绝访问 情况一则及分析


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 199 ::
收藏到网摘: n/a

也许这个状况有的朋友已经知道了,但我还是把自己的分析思路写下来给其他的朋友参考。
昨天把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 全选 提示:你可先修改部分代码,再按运行]

运行依然如故。
于是再把DTD去掉。
点击运行可以看到效果:
[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>