通过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

我正在制作一个chrome扩展,它将从当前选定的选项卡中获取内容。 我正在将一个脚本文件注入当前页面,该脚本与扩展名中的脚本通信。 通过在页面中注入javascript,我尝试加载jQuery,以便更容易找到我想要的内容

(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']")