通过javascript加载jQuery时,$未定义
我正在制作一个chrome扩展,它将从当前选定的选项卡中获取内容。 我正在将一个脚本文件注入当前页面,该脚本与扩展名中的脚本通信。 通过在页面中注入javascript,我尝试加载jQuery,以便更容易找到我想要的内容通过javascript加载jQuery时,$未定义,javascript,jquery,google-chrome,Javascript,Jquery,Google Chrome,我正在制作一个chrome扩展,它将从当前选定的选项卡中获取内容。 我正在将一个脚本文件注入当前页面,该脚本与扩展名中的脚本通信。 通过在页面中注入javascript,我尝试加载jQuery,以便更容易找到我想要的内容 (function() { var script = document.createElement('script'); script.setAttribute("src", "http://code.jquery.com/jquery-latest.min.js") scr
(function() {
var script = document.createElement('script');
script.setAttribute("src", "http://code.jquery.com/jquery-latest.min.js")
script.setAttribute("type","text/javascript")
script.onload = script.onreadystatechange = function(){
var port = chrome.runtime.connect({name: "ext"});
port.postMessage({ images: getImages(document)});
port.onMessage.addListener(function(msg) {
if (msg.request == "message")
port.postMessage({ message: getText(document)});
});
};
document.body.appendChild( script );
function getText(doc) {
var textString = $("div[id*='message'],div[class*='message']").filter(function() {
return /[0-9]/.test( $(this).text() );
}).html();
var text = textString.match(/\d+/);
return text;
}
function getImages(doc){
var result = "";
var images = document.getElementsByTagName("IMG");
for(var i = 0; i < images.length; i++){
if(images[i].height > 200 && images[i].width > 200){
result = result + images[i].src + ",";
}
}
return result;
}
})();
等待jQuery加载的代码。它正在进入那里。但是到了
var textString = $("div[id*='message'],div[class*='message']")
“$”未定义看起来这是的副本。似乎有一个公认的答案可以满足您的需求
在stackoverflow上发布仍然是新的,否则我会尝试将其标记为我在其他帖子中看到的副本 您正在将jQuery加载到主页中,但没有加载到扩展的内容脚本中 您的
getText()
函数是在您的内容脚本中运行的,而不是在页面的脚本中运行的,因此它处于一个“孤立的世界”:
因此,它无法访问页面的窗口
对象,因此$
(即窗口。$
)不可访问。另见
因此,您还需要在扩展中加载jQuery。请参见和您需要等待它加载。看起来您没有准备好正确的jQuery文档。下面是一个链接,示例展示了5种不同的文档准备方式-()@Troy它并不意味着是一个jQuery文档准备好了,它是一个自动执行的匿名函数@SLaks
script.onload=script.onreadystatechange=…
正在等待加载,不是吗?对chrome扩展不够熟悉,但是您不需要将jQuery同时加载到原始文档和扩展中吗?或者您是否将其静态地包含在扩展中?(是document
选项卡还是扩展名?)CupawnTae,谢谢您的帮助。我从您提供的链接中了解到脚本没有在页面环境中运行。实际上,我修改了代码,所以当我注入脚本时,我也注入了jQuery,这似乎是可行的。它不再说“$被罚款”。现在,这里的textString是未定义的:“var text=textString.match(/\d+/);”。但这是另一个问题,下次再说。但是非常感谢您提供的链接。
var textString = $("div[id*='message'],div[class*='message']")