Javascript IE8中未定义Window.opener?
我不知道我在这件事上哪里出了问题。在其他浏览器中,它可以正常工作:Javascript IE8中未定义Window.opener?,javascript,internet-explorer-8,ckeditor,Javascript,Internet Explorer 8,Ckeditor,我不知道我在这件事上哪里出了问题。在其他浏览器中,它可以正常工作: function main__pageeditor_new_body_SetUrl() { function getUrlParam(parentObject, paramName) { var reParam = new RegExp('(?:[\?&]|&)' + paramName + '=([^&]+)', 'i') ;
function main__pageeditor_new_body_SetUrl()
{
function getUrlParam(parentObject, paramName)
{
var reParam = new RegExp('(?:[\?&]|&)' + paramName + '=([^&]+)', 'i') ;
var match = parentObject.location.search.match(reParam) ;
return (match && match.length > 1) ? match[1] : '' ;
}
var funcNum = getUrlParam(this, 'CKEditorFuncNum');
this.opener.CKEDITOR.tools.callFunction(funcNum, arguments[0]);
}
但在IE中,您会遇到以下错误:
“this.opener.CKEDITOR”为空或不是对象
为什么这不起作用?出于安全原因,window.opener在IE8中并不总是起作用。我认为您可以将站点放在“受信任区域”中,这样它将允许window.opener工作 如果这两个窗口位于不同的域中,则由于相同的源策略,它将无法在任何浏览器中工作。您的“此”上下文可能会发生更改,具体取决于您如何使用该功能 更改:
this.opener.CKEDITOR.tools.callFunction(funcNum, arguments[0]);
致:
这能解决问题吗?请测试一下什么是空的
this.opener
or
this.opener.CKEDITOR
window.opener在IE8中我的安全区域为“Internet”时工作。 试穿 接下来,我想在CKEDITOR本身上试试这个,所以我去了 在那里,我用开发者工具栏打开了一个弹出窗口“window.open”,在这个弹出窗口中,我执行了下面的代码,效果很好
>>String(this.opener.CKEDITOR.tools.callFunction);
回应
"function(f){var g=e[f];return g&&g.apply(window,Array.prototype.slice.call(arguments,1));}"
在我一切正常的时候,我会要求你上传你的代码。我发现这是一个:
这里提供的解决方案是:
在internet选项的“安全”选项卡下,单击“受信任的网站”图标。现在选中标记为“启用保护模式”的复选框并重新启动internet explorer
另一个建议也将站点从受信任区域中删除:
从受信任的站点列表中删除该站点。。。它可能已经映射到与开放器(intranet)相同的安全区域。选择IE中的文件>属性对话框,以确定页面/域映射到哪个安全区域
考虑到目前为止您可能已经尝试了几个建议,您可能已经更改了足够多的设置,使其处于奇怪的配置状态。我建议您将所有区域设置重置为默认设置,然后从头开始。对于任何想知道的人来说,这非常有帮助:
我在http:/localhost:8080中运行的Web应用程序中遇到了window.opener变为null的问题。如果我将IP地址/主机名改为localhost,则不会发生此问题
让我们检查一下,我坚信这个解决方案很有帮助。您的示例中一定缺少一些javascript。有什么东西将window.opener分配给这个.opener吗?我已经上传了与此错误相关的部分代码。我不能上传完整的网站,因为它是一个私人客户端。我已经尝试过测试安全区域,但没有成功。我假设您正在通过window.open打开的页面上执行此脚本。是这样吗?请您在window.open之前的基本页面上添加此行警报(CKEDITOR.tools.callFunction),并告诉我结果。虽然我同意使用
window
而不是this
是一个好主意,但我不同意这是一个可能的解决方案。该函数始终以相同的方式使用,并且在所有其他浏览器中都有效。此外,this.opener
解析为一个对象,只是它没有解析为正确的对象(出于安全原因)。此外,原始海报上的评论非常清楚地表明它没有解决问题。问题中已经提到:“this.opener.CKEDITOR”为空或不是对象
。这意味着window.opener正在工作,但您无法从window.opener访问CKEDITOR对象。试试这个
"function(f){var g=e[f];return g&&g.apply(window,Array.prototype.slice.call(arguments,1));}"