【问题标题】:Jquery .load issue when dealing with Iframes?处理 iframe 时出现 Jquery .load 问题?
【发布时间】:2010-09-14 15:42:26
【问题描述】:

我成功使用以下代码将一些内容异步加载到网页中:

 jQuery.noConflict();
        jQuery("#boxasync").load("box.php", "",
            function(responseText, textStatus, XMLHttpRequest) {
                if(textStatus == 'error') {
                    jQuery('#boxasync').html('There was an error making the AJAX request');
                }});

现在,当尝试使用相同的代码加载常见的共享按钮(tweetme、facebook、digg)时,网页内容被清除,浏览器被设置为等待状态。

我发现那些共享按钮包含一些嵌入 iframe 的代码(恐怕还有 javascript)。

这可能是 jQuery .load 失败的原因吗?

【问题讨论】:

  • .load() 使用 XMLHttpRequest,因此如果您正在执行跨域请求(看起来就是这种情况),您的响应将为空白。很多关于这个的信息可以在堆栈溢出中找到,所以这里不再赘述。
  • 感谢您的帮助。在您看来,有没有办法实现这些共享按钮的异步加载?
  • 我会四处寻找。感谢您的帮助

标签: php javascript jquery iframe load


【解决方案1】:

为第三方调用而设计的脚本通常使用document.write() 来输出其内容。

当加载到主页源中的直接<script> 元素中时,这很好,因为此时document.write 只是将输出添加到导致它的<script> 位置的页面。但是在页面加载之后就不好了:内容没有“写入位置”结束,所以 JS 所做的是推断您打算调用 document.open() 来编写一个全新的文档,然后再调用 write .这会破坏当前页面内容。

您可以尝试“欺骗”第三方脚本,方法是创建自己的函数来覆盖document.write,将传递给它的字符串重定向到一个变量,然后可以使用innerHTML/html() 将其输出到页面.但是您最好提取脚本所做的内容并自己做。减少对第三方脚本的依赖是一件好事,因为每次您使用一个脚本时,您都在为该方提供对您的安全上下文的完整跨站点脚本访问权限。

在任何情况下,您都不应该使用.load().html() 来加载包含<script> 的内容,因为结果非常不可靠。

【讨论】:

  • 应该使用什么来加载可能包含
  • 没有可靠的方法。 jQuery 尝试解决这里的跨浏览器问题,但失败了。将脚本和标记分开。尽量保持脚本代码完全静态,并在需要时执行它;如果您确实需要执行从服务器返回的脚本,请使用eval 并将其与返回的标记分开。
猜你喜欢
  • 2020-06-06
  • 2013-01-25
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多