例如,打开http://camel.apache.org/, 然后在Chrome或Firefox中打开控制台, 执行jQuery注入的代码:
var jq = document.createElement('script');
jq.src = "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.js";
document.getElementsByTagName('head')[0].appendChild(jq);
会收到错误:
Uncaught TypeError: undefined is not a function
在jQuery.js第3536行:
return readyList.promise( obj ); // 'promise' is an undefined function.
答案 0 :(得分:0)
在同一页面中添加:
var jq = document.createElement('script');
jq.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.js";
document.getElementsByTagName('head')[0].appendChild(jq);
它会起作用。
当您使用//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.js
而没有https:
或http:
时,它会根据某些因素自动尝试获取其中一个。在这种情况下,它会尝试获取http:
,但该网站只接受对https:
的引用,因此会失败。
以下是另一篇文章的引用:
使用与协议无关的绝对值 路径:
<img src="//domain.com/img/logo.png"/>
如果浏览器正在查看页面 SSL通过HTTPS,然后它会请求 使用https协议的资产, 否则它会用HTTP请求它。
这可以防止这个页面太糟糕了 包含安全和非安全 项&#34; IE中的错误消息,保持 您的所有资产请求 相同的协议。
警告:在
<link>
上使用时 @import用于样式表,IE7和IE8 download the file twice。所有其他 然而,用途很好。
答案 1 :(得分:0)
回答我的问题:
有些网站定义了Object
的原型,例如:
if (!Object.prototype.extend) {
Object.prototype.extend = function(){}
}
它会打破jQuery。
以下是类似问题Prototyping Object in Javascript breaks jQuery?
an advice from John Resig :we're looking into for the future, but
please don't do it, regardless of the state of jQuery.
它发布于6年前,但似乎无法解决。
以下是来自the bug ticket的解决方案:
for (var i in O) {
if (!O.hasOwnProperty(i)) { continue; }// Add this to all `for...in` loops
// other code stays unchanged
}
但是这样,你必须创建一个自定义的jQuery(所以你不能从公共CDN导入jQuery)。