I'我试图让jquery在我的chrome扩展的background.js中工作,结果成功了;不起作用.为什么?

I'm trying to get jquery working in the background.js of my chrome extension and it won't work. why?

本文关键字:工作 结果 js background 成功 为什么 不起作用 扩展 chrome 我的 jquery      更新时间:2023-09-26

我读过很多关于jQuery和后台页面的堆栈溢出问题,只是不理解参与规则。我不知道他们是如何互动的。有人能告诉我为什么这个代码不起作用吗?

manifest.json
{
  "name": "test 1",
  "description": "testing jquery",
  "version": "2.0",
  "permissions": [
    "activeTab"
  ],
  "background": {
    "scripts": [ "jquery-2.1.1.js", "background.js"],
    "persistent": false
  },
  "browser_action": {
     "default_title": "test"
  },
  "manifest_version": 2
}

当我上传扩展时,我不会忘记包含jQuery文件

background.js
chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript(
    { code: 'console.log("this works");'},
    { code: '$( document ).ready(function() { console.log( "but this does not work :(" ); });' }
  );
});

请记住,我熟悉如何使用内容脚本使用jQuery,但这些脚本的问题是

chrome.****** 

命令不起作用。

请帮忙!

您正在正确地将jQuery加载到后台页面中。如果您在它的代码中使用$(document).ready(),它就会起作用。

问题是,当您使用executeScript时,您指定的代码不会在与background.js相同的上下文中执行。创建了一个全新的JS上下文,并将其附加到有问题的选项卡上,而该上下文中没有jQuery(顺便说一句,即使选项卡的上下文本身也有jQuery,请参阅孤立上下文)。

此外,您打错了executeScript。其论点是:

  • 整数(可选)tabId
  • 对象details
  • 功能(可选)callback

你用两个对象来调用它;它不是那样工作的。


因此,要修复此问题,您需要首先在执行上下文中注入jQuery,然后再注入代码。您需要连锁2个调用,以确保它们以正确的顺序执行。

chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript(
    tab.id,
    { file: 'jquery-2.1.1.js' },
    function() {
      chrome.tabs.executeScript(
        tab.id,
        { code: '$( document ).ready(function() { console.log( "This works now" ); });' }
      );
    }
  );
});
相关文章: