代码之家  ›  专栏  ›  技术社区  ›  Sarfraz

jQuery/iframe在Chrome中不工作

  •  15
  • Sarfraz  · 技术社区  · 14 年前

    我在这里创建了一个facebook粉丝页面:

    http://www.facebook.com/apps/application.php?id=120196931351044&v=app_120196931351044

    我试着用 load ready 但仍然没有运气。
    有人在chrome中看到过类似的问题吗?

    头部的大图像来自iframe,一个包含jquery的页面。

    更新:

    如下面的评论所示,它似乎在Safari中也不起作用。

    当在iframe之外运行时,相同的代码在chrome中似乎也能工作,下面是链接 到工作页:

    http://jsbin.com/esame4/4

    更新3:

    http://www.google.am/support/forum/p/Chrome/thread?tid=2c81c3e3fd99b388&hl=en
    http://forums.sharethis.com/topic.php?id=2742

    6 回复  |  直到 14 年前
        1
  •  5
  •   Rob Md Fahim Faez Abir    12 年前

    解决办法其实很简单。当你看到Facebook页面/应用程序时,要让iframe的内容在Chrome中显示良好,你必须从安全的服务器调用内容或属性。

    必须确保所有必需的文件和文件夹(如CSS、JS和图像文件)都位于安全文件夹中。

    1. 更改htaccess文件和mod rewrite条件以强制对所有或特定文件夹使用SSL,特别是在使用变量调用文件时。如果使用绝对URL,请将其更改为https。

    希望这有帮助!

        2
  •  2
  •   JoshMock    14 年前

    一些建议,主要与gallery.php页面上的Javascript设置有关:

    this former Chrome bug 指)。

    也许这与您从ajax.googleapis.com引用jquery.min.js有关,而不是将其托管在与gallery.php页面相同的域中。尝试将jquery.min.js的副本放在服务器上并链接到该副本,看看是否有帮助。

    <link> 标记到您的内部 <head> 标签,因为那是一个更合适的地方。

    jQuery Innerfade library 运行你的旋转横幅。它会清理你的脚本,谁知道呢,也许会让浏览器相信你不是在试图利用安全漏洞。

    如果无法切换到使用innerfead,至少将JavaScript变量更改为不使用$命名(例如,将“$curbox”变量更改为“curbox”)。它可能会进一步清除浏览器可能与Javascript之间的任何混淆。至少,这是一个很好的实践,尤其是在使用jQuery时。

        3
  •  2
  •   AndyD273    14 年前

    如果document.ready有问题,因为页面已经在iframe中加载,所以无法在iframe中调用它,那么是否可以将要加载的javascript放在新页面的底部,而不是document.ready中,以便在加载其他所有内容后加载它? 我在一些页面上做过类似的事情,比如在页面的顶部放一点javascript来显示加载图像,在底部放一块javascript来隐藏图像,等等。。。

    <html>
        <head><script>function pop(){alert("Page Loaded");}</script></head>
        <body>Lorum ipsum...</body>
        <script>pop();</script>
    </html>
    
        4
  •  1
  •   mannysz    14 年前

    嘿,萨克,我试过chrome5.0.375.86,它成功了。由于safari和chrome使用相同的web引擎(webkit),它可能会继承相同的问题。由于这是一个javascript问题,现在chrome使用googlev8javascript引擎代替JavaScriptCore(webkit的默认javascript引擎),这个问题似乎在chrome的上一个版本中得到了解决。可能是JavaScriptCore上的问题,因为在iframe构造之前,DOM已经加载到文档中,所以不发送ready或load事件。临时解决方案可以设置一个标志来检查内容是否已初始化。设置一个带有setTimeOut的5到10秒计时器来检查这个标志。如果未初始化,则在setTimeOut回调上调用它。因此,如果safari不调用load或ready事件,setTimeOut可以帮您完成。当然,不要把它放在jquery层中。将它作为纯javascript标记放在HTML中,由iFrame加载。

        5
  •  0
  •   Keith    14 年前

    检查您试图放入 iframe . 你在找一个叫 x-frame-options

    这是一个新的安全选项,告诉浏览器不要加载框架内容。默认情况下,很多web服务器都会添加它。

    这是值得检查的。

        6
  •  0
  •   Alexei - check Codidact    8 年前

    不工作的原因是浏览器将iframe标记为不安全。 要解决此问题,只需在要显示的页的页眉添加一个字符集:

    < head ><br/>
    < meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"/><br/>
    < /head><br/>