我成功使用以下代码将一些内容异步加载到网页中:
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失败的原因吗?
答案 0 :(得分:0)
设计用于第三方调用的脚本通常使用document.write()
输出其内容。
当加载到主页面源中的直接<script>
元素时,这很好,因为此时document.write
只是将<script>
的位置添加到页面document.open()
它。但是在加载页面之后没有好处:内容最终没有“写入位置”,所以JS的作用是推断你打算在调用write
之前编写一个全新的文档{1}}。这会破坏当前页面内容。
您可以尝试通过创建覆盖document.write
的自己的函数来“欺骗”第三方脚本,将传递给它的字符串重定向到变量,然后使用innerHTML
将其输出到页面/ html()
。但你可能最好不要自己提取脚本所做的事情并自己做。减少对第三方脚本的依赖是一件好事,因为每次使用第三方脚本时,您都会为该方提供完整的跨站点脚本访问权限。
在任何情况下,您都不应使用.load()
或.html()
来加载包含<script>
的内容,因为结果非常不可靠。