我在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”,弹出窗口可以在父母。
是什么在本地域上阻止了它?我错过了什么?
答案 0 :(得分:0)
按照@charlietfl最初的建议,切换本地域似乎确实解决了该问题。现在,它以 $categories = Category::select('*')->get(); //for example
$array = [
[
"pos" => "0",
"col" => "1",
"row" => "1",
"size_x" => "2",
"size_y" => "1",
"cat_id" => 1,
],
[
"pos" => "0",
"col" => "1",
"row" => "2",
"size_x" => "2",
"size_y" => "1",
"cat_id" => 10,
]
];
$grids = collect($array);
if ($grids->isNotEmpty()) {
$grids_arr = $grids->pluck("cat_id")->toArray();
$grids_arr = array_map('intval', $grids_arr);
//Please add these three lines to your code
$catIds = $categories->pluck('cat_id')->toArray();
$diff = array_diff($catIds, $grids_arr);
$grids_arr = array_merge($grids_arr, $diff);
//-----
$sorted = $categories->sortBy(function ($model) use ($grids_arr) {
return array_search($model->cat_id, $grids_arr);
});
return $sorted->values()->all();
}
而不是local.mysite.com
的身份在本地运行,并且同源错误消失了。我仍然不清楚是什么引发了错误(是因为该域只有两个部分而不是三个部分?它是针对以“ .local”结尾的域吗?),但是在极少数情况下,其他任何人都会跳闸在此之上,这就是为我解决的问题。