错误:拒绝访问属性的权限' $' - iFrame

时间:2015-02-26 08:36:39

标签: html iframe modal-dialog lightbox

我在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加载?) - 或者是否有另一种更简单的解决方案?

1 个答案:

答案 0 :(得分:0)

您需要将两个域都设置为JavaScript中的same top level domain

  

页面可能会因某些限制而改变自己的来源。脚本可以将document.domain的值设置为当前域的子集。如果它这样做,则较短的域用于后续的原始检查。

因此,如果您有static.example.comnews.example.com,则应在尝试任何跨框架访问之前包含此JavaScript:

document.domain = 'example.com';

您需要在两个窗口中运行此代码。