javascript - 为什么同源策略会在本地域上阻止此 javascript 调用?
问题描述
我有一个在http://mysite.local/上运行的本地开发站点(它是一个安装了Grappelli 的 Django 管理站点,如果有任何相关性的话)。
管理站点为某些操作打开一个弹出窗口(即通过showRelatedObjectLookupPopup()
)
由于之前与相同来源策略的类似问题(在生产中,管理站点从 CDN 域加载一些 URL,这可以触发它)我们有一个“规范化器”JS 函数,它明确设置:
document.domain = "mysite.local";
在页面加载时,在父级和弹出窗口中。
弹出窗口包含一个带有 onclick 处理程序的链接,该处理程序在父级中触发 JS 函数:
onclick="opener.dismissRelatedLookupPopup(window, '422'); return false;"
在 Chrome 或 FF 中单击此链接会导致类似的浏览器错误:
访问跨域对象上的属性“dismissRelatedLookupPopup”的权限被拒绝
或者
阻止具有源“ http://mysite.local ”的框架访问跨域框架。
弹出窗口和打开程序 URL 共享相同的协议、域和端口。
这只是本地域上的问题。在 dev/uat/production 站点(即 dev.mysite.com)上,所有这些站点的域都通过上述“normaliser”函数设置为超级域“mysite.com”,弹出窗口可以成功调用 JS 函数父母。
是什么阻止了它在本地域上?我错过了什么?
解决方案
根据@charlietfl 的原始建议,切换本地域似乎确实解决了这个问题。它现在在本地运行local.mysite.com
而不是mysite.local
,并且同源错误已经消失。我仍然不清楚是什么触发了错误(是因为域只有两个部分而不是三个部分吗?它是否特定于以“.local”结尾的域?)但万一其他人绊倒就这一点,这就是为我解决的问题。
推荐阅读
- python - 从 api dict 响应中获取价值
- caching - .NET Core 下拉 NuGet 包到用户缓存
- python - 作为命令行参数传入时,三重积分函数不起作用
- c# - 在按钮单击时将列表视图中的行分配给字典
- google-analytics - 通过 Measurement Protocol 发送的一些 Google Analytics(分析)事件在一天后消失
- excel - Excel 数据透视图:显示最后 25 行
- react-native - 如何调试 babel.config.js
- sql - SQL 中的 Sumproduct 偏移每一行
- pyspark - 使用 pyspark 调整回归树模型的 k 折交叉验证
- python - 将整数数组更改为二进制数组