0

我有一些 JavaScript 在同一域上的两个不同服务器之间共享请求。

.com 是 JavaScript 中域的要求吗?

在这种情况下,两台服务器都在 .abc.tyy 域上,tyy 通常是 .com

想知道我是否只能将 .com 用于域?我收到权限被拒绝错误,但此代码在同一域 (.com) 上的其他单独服务器上运行良好。

更新: 这正是我使用它的方式:

123.abc.tyy 有一个脚本可以加载我想要访问的属性。

123.abc.tyy 上的脚本在打开脚本标记处将 document.domain 设置为“abc.tyy”。

当我在 123.abc.tyy 的脚本 FROM 234.abc.tyy 中调用“getUser()”函数时,出现权限被拒绝错误。

我调用“getUser()”的方式是:我在浏览器中访问http://123.abc.tyy,并且该站点允许我指定要加载到其中一个框架中的 URL。我在该页面中将该 URL 指向http://234.abc.tyy/BeginLoadPatient.aspx “我正在执行以下操作:

window.location = ' http://234.abc.tyy/LoadPatient.aspx?PatientId= ' + getUser() '; getUser 是源自 123.abc.tyy 的函数

如果我将 234.abc.tyy 和 123.abc.tyy 添加到我的受信任站点,一切正常 - 这是跳过同源策略吗?

4

1 回答 1

2

不,SOP 不关心域是什么,只关心它代表相同的来源。(会不会是您在某处硬编码了 .com 域?)

请注意,要考虑的不仅仅是域。同源策略也着眼于协议、端口和主机。所以aaa.abc.tyybbb.abc.tyy不同的起源。

如果您控制所涉及的服务器,您可能会查看Cross-Origin Resource Sharing,但不幸的是,CORS 仅在现代浏览器中实现(并且在那些支持它的 IE 版本上,只有当您明确使用它时才支持它) .

当然,另一种选择是JSON-P,它现在具有跨浏览器工作的优势。

另一件要注意的是,这里这里document.domain的细节。


修改后更新

123.abc.tyy 上的脚本在打开脚本标记处将 document.domain 设置为“abc.tyy”。

当我在 123.abc.tyy 的脚本 FROM 234.abc.tyy 中调用“getUser()”函数时,出现权限被拒绝错误。

您还需要设置document.domain为“abc.tyy” BeginLoadPatient.aspx

如果我将 234.abc.tyy 和 123.abc.tyy 添加到我的受信任站点,一切正常 - 这是跳过同源策略吗?

我一点也不感到惊讶(尽管对我来说这会很狡猾),但对它没有第一手的了解。将很容易测试。

于 2010-09-15T13:50:10.120 回答