2010-09-14 105 views
0

我用成功下面的代码以异步方式的一些内容加载到一个网页:处理iframe时出现Jquery .load问题?

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'); 
       }}); 

现在试图使用相同的代码加载共同sharebuttons(tweetme,Facebook和Digg的)的网页内容被消灭时,并且浏览器被设置为一种等待状态。

我发现那些共享按钮体现了一些嵌入iframe的代码(并且JavaScript也是如此,恐怕)。

难道这就是jQuery .load失败的原因吗?

+1

.load()使用XMLHttpRequest,所以如果你正在做一个跨域请求(看起来像是这种情况),你的回应将是空白的。有关堆栈溢出的信息很多,所以在这里不再重复。 – BGerrissen 2010-09-14 15:49:55

+0

感谢您的帮助。在你看来,有没有一种方法可以实现这些共享按钮的异步加载? – Riccardo 2010-09-14 15:54:42

+0

我会四处搜寻。感谢您的帮助 – Riccardo 2010-09-14 16:04:20

回答

0

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

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

您可以通过自己的函数,它覆盖document.write,重定向传递给它的变量则可以输出到使用innerHTML/html()页面中的字符串尝试“骗”第三方脚本。但是,你可能会更好地提取脚本的内容并自己做。减少对第三方脚本的依赖是一件好事,因为每次使用第三方脚本时,都会让该方完全跨站点脚本访问您的安全上下文。

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

+0

应该使用什么来加载可能包含