将jQuery添加到第三方页面失败

时间:2011-11-09 12:04:32

标签: javascript jquery

我正在尝试一些事情,其中​​我尝试在网站上插入jquery,即http://www.tesco.com/wine

出于某种原因,我无法访问jQuery,即使我能够成功地将新的脚本标记附加到body元素。此外,该页面似乎有一个window.$函数,我尝试使用delete window.$删除它。这对我来说似乎是假的。你怎么做一些不可取的东西?

以下是我用于将jQuery脚本附加到文档的代码:

var s = document.createElement('script');
s.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js";
document.body.appendChild(s)

它正在其他页面上工作。

2 个答案:

答案 0 :(得分:4)

在JavaScript聊天中讨论了这个问题,Tim Stone discovered页面上的JS添加了自己的Object.prototype.extend实现 - 它打破了jQuery脚本。要修复它(但可能会破坏页面上的另一个脚本),您可以在添加jQuery之前删除它:

delete Object.prototype.extend;
var s = document.createElement('script');
s.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js";
document.body.appendChild(s)

$已在该页面上定义,并带有以下函数声明:

function $(A){return document.getElementById(A)}

document.getElementById()$()别名并不鲜见 - 实际上,Firebug和WebKit的开发人员工具在其控制台中执行此操作。

它不可删除,因为它被声明为function语句而不是对象属性。虽然delete可能在某些浏览器中有效,但它不应该也不会在其他浏览器中使用。话虽这么说,我能够通过一个简单的赋值覆盖函数:

$ = function () {}

当jQuery加载时,它会创建jQuery命名空间,并使用$将此命名空间别名。因此,如果页面上的其他内容覆盖$,您仍然可以使用jQuery()

答案 1 :(得分:1)

如果已定义$,则可以始终使用jQuery