我在Bootstrap模式中使用iFrame时遇到问题。它是一个新闻系统,我从另一个子域的iFrame加载新闻内容。一切正常,如果用户点击任何新闻项目中的图像,我想在父窗口中打开一个灯箱(Fancybox)。这通常不是问题,我使用的是这样的东西:
// so i know its an Popup / has an iFrame (class Popup is when it is opened in an BS Modal) - otherwise ill go to my news size and show the article there.
$('a[rel="lightbox"]').click(function(e) {
e.preventDefault();
var link = $(this).attr('href');
if ($(this).closest('body').hasClass('popup')) {
parent.$.fancybox({
// this is without any popup
$.fancybox({
href: link,
...
我的图片位于其他域名上 - 例如static.site.com。生病时去news.site.com - 并打开一个Popup(现在它来自同一个域) - 然后点击图片 - 一切都很好,
parent.$
工作正常。
但是,当我打开Modal(来自news.site.com的内容)然后点击图片(static.site.com)时,从主站点(www.site.com)出现以下错误:
Error: Permission denied to access property '$'
我已经允许PHP Header从另一个子域加载内容 - 但是生病仍然会出现此错误。
我是否需要使用JSONP(将页面内容作为HTML加载?) - 或者是否有另一种更简单的解决方案?
答案 0 :(得分:0)
您需要将两个域都设置为JavaScript中的same top level domain:
页面可能会因某些限制而改变自己的来源。脚本可以将document.domain的值设置为当前域的子集。如果它这样做,则较短的域用于后续的原始检查。
因此,如果您有static.example.com
和news.example.com
,则应在尝试任何跨框架访问之前包含此JavaScript:
document.domain = 'example.com';
您需要在两个窗口中运行此代码。