我在这里创建了一个facebook粉丝页面:
http://www.facebook.com/apps/application.php?id=120196931351044&v=app_120196931351044
它结合了iframe来调用某些使用jquery的页面/图片库。除Chrome之外,所有浏览器都能正常运行。 Chrome中的任何内容都不会出现在iframe中,只是空白背景。
我尝试使用load
事件代替ready
处理程序,但仍然没有运气
有没人见过铬中的类似问题?
非常感谢您的帮助。
标题中的大图片来自iframe,这是一个包含jquery的页面。
更新
如下面的评论所示,即使在Safari中它似乎也不起作用。
更新2
当在iframe外部运行时,相同的代码似乎在chrome中工作,这里是链接 到工作页面:
更新3:
在使用iframe时,似乎这个问题在chrome中仍然存在,如下所示:
http://www.google.am/support/forum/p/Chrome/thread?tid=2c81c3e3fd99b388&hl=en
http://forums.sharethis.com/topic.php?id=2742
答案 0 :(得分:4)
解决方案实际上很简单。要在您看到Facebook页面/应用时在Chrome中显示您的iframe内容,您必须从安全服务器调用内容或属性。
您必须确保所有必需的文件和文件夹(如CSS,JS和图像文件)都位于安全文件夹中。
为此,您需要为您的域提供SSL证书。
更改htaccess文件和mod重写条件以强制所有或特定文件夹使用SSL,尤其是在使用变量调用文件时。如果您使用的是绝对网址,请将其更改为https。
希望这有帮助!
答案 1 :(得分:2)
一些建议,主要与您在gallery.php页面上的Javascript设置有关:
我的第一直觉是说Chrome / WebKit处理跨站点脚本和其他类似潜在安全漏洞的方式是一个错误(甚至是预期的响应)。我知道一些安全漏洞涉及从iframe内部运行脚本(如this former Chrome bug所述)。
也许这与你从ajax.googleapis.com引用你的jquery.min.js而不是在与gallery.php页面相同的域上托管它有关。尝试将jquery.min.js的副本放在您的服务器上并链接到该服务器并查看它是否有帮助。
另外,请尝试将jQuery库<link>
标记移到<head>
标记内,因为这是一个更适合它的地方。
您也可以尝试使用jQuery Innerfade library来运行旋转横幅。它会清理你的脚本,谁知道,或许可以说服浏览器你没有试图利用安全漏洞。
如果您无法切换到使用Innerfade,请至少将JavaScript变量更改为不以$命名(例如,将“$ curbox”变量更改为“curbox”)。它可能会进一步澄清浏览器可能与您的Javascript混淆。至少,这是一种很好的做法,特别是在使用jQuery时。
答案 2 :(得分: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>
答案 3 :(得分:1)
嘿sAc,我在Chrome 5.0.375.86上尝试过它并且有效。由于safari和chrome使用相同的Web引擎(webkit),因此它可以继承同样的问题。由于它是一个javascript问题,现在chrome使用谷歌V8 javascript引擎而不是JavaScriptCore(来自webkit的默认javascript引擎),这个问题似乎在Chrome的最新版本中得到解决。也许它可能是JavaScriptCore上的一个问题,因为在构造iframe之前已经在文档上加载了DOM,所以不调度ready或load事件。可以设置临时解决方案以检查内容是否已初始化。使用setTimeOut放置一个5到10秒的计时器来检查此标志。如果未初始化,则在setTimeOut回调上调用它。因此,如果safari没有调用load或ready事件,setTimeOut可以为你做。当然,不要把它放在你的jquery层中。将其作为HTML中的纯javascript标记添加到iFrame中。
答案 4 :(得分:0)
答案 5 :(得分:0)
不工作的原因是因为浏览器将iframe标记为不安全。
要解决此问题,只需在要显示的页面顶部添加一个字符集:
< head ><br/>
< meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"/><br/>
< /head><br/>