Internet Explorer JavaScript访问文档跨域/禁用同源设置

3
我有一个内部网站的信息亭,需要打开另一个不同域名的网站弹出窗口。我想知道他们是否在使用这个弹出窗口,如果没有,就在一段时间后关闭它。
由于跨域保护和同源策略,我无法在 window.open JS 命令之后访问弹出窗口文档。
Google Chrome 可以通过标志 --disable-web-security 显式地关闭此功能。我尝试使用这里的答案,但似乎不起作用。在 Visual Studio 中调试时显示 "访问被拒绝"。目前使用的是 IE10。
简而言之,如何访问使用 javascript window.open 打开的弹出窗口文档对象,并为可信站点显式禁用 IE10 的同源策略。
我无法修改其他站点服务器上的任何内容,因为它是合作伙伴站点。此外,我已经尝试进入安全选项卡并关闭受保护模式以及启用 Internet/Intranet/Trusted Sites 的所有设置(禁用 Xss 过滤器),但并没有起作用。
没有人阅读这个问题。我无法更改其他站点,两个得到投票的答案都假设我可以。如果我能更改其他站点,这将很容易。这是一个浏览器安全设置问题。

1
你控制着远程站点吗? - Pekka
1
你可以在Internet选项的安全选项卡中禁用它。然而,这是一个非常糟糕的想法。 - SLaks
我们与远程站点合作,所有我们的服务都通过它进行,但不能修改它。 - DFTR
3个回答

1
假设您对另一个站点有控制权,我建议使用JSONP的概念,即:

在打开新窗口时,传递一个随机会话密钥名称,例如

var skeyval=Math.random()*100000; window.open("otherdomain.com?rsKey="+skeyval,"mywindow");

执行上述操作后,请使用JSONP(指向远程域)持续检查skeyval的值。

在远程站点中,每当有用户交互(例如点击、按键等),请使用“rsKey”参数标识的随机生成的会话密钥更新状态文本,例如:活动、空闲。


1
我无法修改其他网站。如果我有权限,这就不是问题了。 - DFTR

1

你是迄今为止唯一一个真正读懂我没有访问其他网站这个事实的人。不幸的是,我发现这些解决方案在更新的IE中不起作用。 - DFTR
很遗憾听到这个消息。新的HTML5 window.postmessage或easyXDM有什么进展吗?解决它的一个非常粗糙的方法是使用iframe方法,并每隔10分钟弹出一个警报,以确认用户仍在工作。您还可以发挥创意,创建一个远程域的抽象前端,基本上让他们始终使用您的系统。 - Apollo Clark
我真的希望IE能像Chrome一样明确地关闭安全性。它有一些设置暗示它可以这样做,而且据我所读,它曾经可以... 哦,算了。送你50个声望。 - DFTR
这是最接近的解决方案,可以在一些远程网站上运行,所以我接受了它。尽管从本质上讲,它并没有解决我的问题,因为远程网站会检查它是否被包含在一个iframe中,并进行重定向。 - DFTR

0

同源策略中有一个小的例外是JSONP,这样你可以让客户端调用外部的JSON API,但不能使用他们的cookie去访问他们的PayPal账户。这是一种很好的、安全的小漏洞,正好适用于这种情况。

你可以使用这种方法在你的网站和远程网站之间进行通信(假设你控制着远程网站,如果不是,你基本上没有办法)。你的服务器可以向远程站点发送请求以获取某个用户的状态,并且每当他们提供输入时,远程站点都可以更新该用户的状态。如果你的网站查询远程站点而该站点处于空闲状态,你可以关闭远程窗口(如果你正在使用iframe、partial view或类似的东西,这是最容易的)。


1
我没有修改其他网站的访问权限(或者像你所说的那样控制权限)。如果我有,这将不是一个问题。 - DFTR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接