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

也许这个状况有的朋友已经知道了,但我还是把自己的分析思路写下来给其他的朋友参考。

昨天把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)。最终简化如下:

never-online 's Tech Blog In CSDN - JS & DHTML

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;

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

运行依然如故。
于是再把DTD去掉。

never-online 's Tech Blog In CSDN - JS & DHTML

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;

[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>

您可能感兴趣的文章:

  • javascript window.opener的用法分析
  • javascript弹出窗口 window.open使用方法以及参数说明分析篇
  • JS window.opener返回父页面的应用
  • js中的window.open返回object的错误的解决方法
  • window.open被浏览器拦截后的自定义提示效果代码
  • window.open()弹出居中的窗口
  • window.open的功能全解析
  • window.open不被拦截的实现代码

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

相关文章

  • 2010-04-04JavaScript toFixed() 方法
  • 2016-06-06大型JavaScript应用程序架构设计模式
  • 2015-06-06简述JavaScript中正则表达式的使用方法
  • 2013-07-07JavaScript常用全局属性与方法记录积累
  • 2014-12-12js数组的操作指南
  • 2015-01-01Javascript基础教程之数据类型 (字符串 String)
  • 2016-05-05JavaScript基础教程——入门必看篇
  • 2015-06-06在浏览器中打开或关闭JavaScript的方法
  • 2013-01-01js中parseFloat(参数1,参数2)定义和用法及注意事项
  • 2012-12-12JavaScript 盒模型 尺寸深入理解

最新评论

时间: 2007-01-08

window.open被浏览器拦截后的自定义提示效果代码

现在越来越多的浏览器有拦截弹出窗口的功能.广告弹出来给拦掉了就无所谓,要是客户在付款时给拦掉了可就不能乱算了. Gmail的"哎呀"算是经典,可是,前天心云给出了更帅的提示=.= 记得打开浏览器拦截后 测试一下,在线阅读器里不知道代码会不会给过滤..代码在下边,其实没什么技术含量滴.挖哈哈... 复制代码 代码如下: window._open=window.open;  window.open=function(sURL,sName,sFeatures,bReplace){    if

js中的window.open返回object的错误的解决方法

解决window.open后返回object的错误 复制代码 代码如下: <a href="javascript:void(window.open('','','width=200,height=200'))">window.open()</a> 只在js的外层加上一个void不带返回参数的声明. 顺便在这里将window.open函数的参数使用也列出来: window.open函数参数列表 window = object.open([URL ][, name

window.open()弹出居中的窗口

Javascript代码 function openwindow(url,name,iWidth,iHeight) {  var url;                                 //转向网页的地址;  var name;                           //网页名称,可为空;  var iWidth;                          //弹出窗口的宽度;  var iHeight;                        //

window.open的功能全解析

[1.最基本的弹出窗口代码]  其实代码非常简单:  <SCRIPT LANGUAGE="javascript">  <!--  window.open ('page.html')  -->  </SCRIPT>  因为着是一段javascripts代码,所以它们应该放在<SCRIPT LANGUAGE="javascr ipt">标签和</script>之间.<!-- 和 -->是对一些版本低

javascript弹出窗口 window.open使用方法以及参数说明分析篇

window.open使用方法以及参数说明一.window.open()支持环境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+ 二.基本语法: window.open(pageURL,name,parameters) 其中: pageURL 为子窗口路径 name 为子窗口句柄 parameters 为窗口参数(各参数用逗号分隔) 三.各项参数 其中yes/no也可使用1/0:pixel value为具体的数值,单位象素. 参数 | 取值范围 |

javascript window.opener的用法分析

window.opener 的用法 window.opener 返回的是创建当前窗口的那个窗口的引用,比如点击了a.htm上的一个链接而打开了b.htm,然后我们打算在b.htm上输入一个值然后赋予a.htm上的一个id为"name"的textbox中,就可以写为: window.opener.document.getElementById("name").value = "输入的数据"; 对于javascript中的window.opener没

window.open不被拦截的实现代码

复制代码 代码如下: $("#last").click(function(){ var w=window.open(); setTimeout(function(){ w.location="http://www.baidu.com"; }, 1000); return false; });

JS window.opener返回父页面的应用

JS代码: window.open(): 而当支付成功后,需要关闭支付平台支付成功界面,并在客户端加载客户端支付成功页面,JS代码: window.opener.location.href=url;window.close();

js中iframe调用父页面的方法

本文实例讲述了js中iframe调用父页面的方法.分享给大家供大家参考.具体实现方法如下: 子页面调用父页面的方法在js中很容易实现.我们只需要在主页面加个函数,然后在子页面通过window.parent.方法()即可实现了 比如调用a()函数,就写成: 复制代码 代码如下: window.parent.a(); 但是我在chrome浏览器下却发现此方法无效了 复制代码 代码如下: //在父页面中调用该函数 <script> function dey() { var cards_frame=d

JS实现iframe中子父页面跨域通讯的方法分析

本文实例讲述了JS实现iframe中子父页面跨域通讯的方法.分享给大家供大家参考,具体如下: 在非跨域的情况下,iframe中的子父页面可以很方便的通讯,但是在跨域的情况下,只能通过window.postMessage()方法来向其他页面发送信息,其他页面要通过window.addEventListener()监听事件来接收信息: #跨域发送信息 #window.postMessage()语法 otherWindow.postMessage(message, targetOrigin, [tra

.NET中利用js让子窗体向父页面传值的实现方法

子页面C#后台代码: 复制代码 代码如下: /// <summary>        /// 将设置好的值赋给父页面        /// </summary>        /// <param name="count">需要传递的值</param>        void SetValueToParentPage(int count, string strPersons)       {           StringBuilder

js中opener与parent的区别详细解析

opener即谁打开我的,比如A页面利用window.open弹出了B页面窗口,那么A页面所在窗口就是B页面的opener,在B页面通过opener对象可以访问A页面. parent表示父窗口,比如一个A页面利用iframe或frame调用B页面,那么A页面所在窗口就是B页面的parent.在JS中,window.opener只是对弹出窗口的母窗口的一个引用.比如:a.html中,通过点击按钮等方式window.open出一个新的窗口b.html.那么在b.html中,就可以通过window.o

关于Iframe父页面与子页面之间的相互调用

iframe元素就是文档中的文档. window对象: 浏览器会在其打开一个HTML文档时创建一个对应的window对象.但是,如果一个文档定义了一个或者多个框架(即:包含一个或者多个frame或者iframe标签),浏览器就会为原始文档创建一个window对象,再为每个iframe创建额外的window对象,这些额外的window对象是原始窗口的子窗口. contentWindow: 是指指定的iframe或者iframe所在的window对象 Demo1 父页面fu.html: <!DOCT

js关闭模态窗口刷新父页面或跳转页面

有两个窗口: A窗口(父),B窗口(模态) A窗口里有一个DATAGRID,一个按钮. 点击按钮时,弹出B窗口(模态).在B窗口中添加数据,提交后,要求B窗口自关闭,然后刷新A窗口(父) 复制代码 代码如下: <script type="text/javascript"> function openSubWin() { window.showModalDialog('b.html', 'newwindow', 'height=500, width=400, top=0, l

JS实现刷新父页面不弹出提示框的方法

本文实例讲述了JS实现刷新父页面不弹出提示框的方法.分享给大家供大家参考,具体如下: A页面 open方式出 B页面 ,当B页面做了类如保存动作后,需要关闭B页面,刷新A页面的情况下,会弹出一个提示框,要求点重试,这个就是发生预料之外的情况,用户体验很差. 解决方案分两种情况: 1.A页面很简单的情况(没有frame/iframe) 在B页面中的function中: function close(){ window.opener.location.reload(); window.opener

javascript关于open.window子页面执行完成后刷新父页面的问题分析

本文实例分析了javascript关于open.window子页面执行完成后刷新父页面的方法.分享给大家供大家参考.具体分析如下: 主页面: <input id="btnAdd" type="button" onclick="openWin();" value="添加" /> 在js中有如下代码: function openWin() { window.open('addInfo.jsp', '_blank', '