15

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

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

它包含 iframe 来调用使用 jquery 的某些页面/图像库。除 Chrome 外,所有浏览器都可以正常工作。iframe 中的 Chrome 中没有显示任何内容,只有空白背景。

我尝试使用load事件而不是ready处理程序,但仍然没有运气。
有没有人在chrome中目睹过类似的问题?

对你的帮助表示感谢。

标题中的大图像来自 iframe,一个包含 jquery 的页面。

更新:

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

更新 2

在 iframe 之外运行时,相同的代码似乎可以在 chrome 中运行,这是工作页面的链接:

http://jsbin.com/esame4/4

更新 3:

似乎在使用 iframe 时这个问题在 chrome 中仍然存在,如下所示:

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

4

6 回答 6

5

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

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

  1. 为此,您需要为您的域提供 SSL 证书。

  2. 更改您的 htaccess 文件和 mod 重写条件以强制所有或特定文件夹使用 SSL,尤其是当您使用变量调用文件时。如果您使用的是绝对 URL,请将它们更改为 https。

希望这可以帮助!

于 2012-11-13T15:29:52.477 回答
2

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

<html>
    <head><script>function pop(){alert("Page Loaded");}</script></head>
    <body>Lorum ipsum...</body>
    <script>pop();</script>
</html>
于 2010-07-02T20:48:11.603 回答
2

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

我的第一直觉是说这是 Chrome/WebKit 处理跨站点脚本和其他类似潜在安全漏洞的方式中的一个错误(甚至是预期的响应)。我知道一些安全漏洞涉及从 iframe 内部运行脚本(正如以前的 Chrome 错误所指的那样)。

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

此外,尝试将 jQuery 库<link>标签移动到标签内<head>,因为这是一个更合适的位置。

您也可以尝试使用jQuery Innerfade 库来运行您的旋转横幅。它会清理你的脚本,而且,谁知道呢,也许会让浏览器相信你并没有试图利用安全漏洞。

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

于 2010-06-28T15:22:05.847 回答
1

嘿 sAc,我已经在 Chrome 5.0.375.86 上尝试过它并且它有效。由于 safari 和 chrome 使用相同的 Web 引擎 (webkit),它可能会继承相同的问题。由于这是一个javascript问题,现在chrome使用google V8 javascript引擎而不是JavaScriptCore(来自webkit的默认javascript引擎),这个问题似乎在Chrome的最新版本中得到了解决。也许这可能是 JavaScriptCore 上的问题,因为在构建 iframe 之前,DOM 已经加载到文档上,所以不调度 ready 或 load 事件。临时解决方案可以设置一个标志来检查内容是否已初始化。使用 setTimeOut 放置一个 5 到 10 秒的计时器来检查这个标志。如果未初始化,则在 setTimeOut 回调中调用它。因此,如果 safari 不调用 load 或 ready 事件,setTimeOut 可以为您完成。当然,不要把它放在你的 jquery 层中。将它作为纯 JavaScript 标记放在 HTML 中,以由 iFrame 加载。

于 2010-07-02T19:14:14.970 回答
0

检查您尝试放入的页面中的响应标头iframe。您正在寻找一个名为x-frame-options的标头。

这是一个新的安全选项,告诉浏览器不要加载框架内容。许多网络服务器会默认添加它。

这是值得检查的东西。

于 2010-06-28T15:34:37.557 回答
0

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

< head ><br/>
< meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"/><br/>
< /head><br/>
于 2017-01-05T17:08:02.603 回答