Google Chrome扩展程序jquery未加载

Raj*_*eev 2 javascript jquery google-chrome-extension

在下面的google chrome扩展文件中为什么我不能在myscript.js文件中使用jquery脚本,是不是在myscript.js文件中加载了jquery,应该在manifest文件中进行哪些更改以使用myscript.js中的jquery

的manifest.json

  {
    "manifest_version": 2,

    "name": "One-click Kittens",
    "description": "This extension demonstrates a browser action with kittens.",
    "version": "1.0",
     "background": { "scripts": ["jquery-1.9.1.min.js","myscript.js"] },

    "permissions": [
     "tabs", "http://*/*"
    ],
    "browser_action": {
      "default_icon": "icon.png",
      "default_popup": "popup.html"
    }
  }
Run Code Online (Sandbox Code Playgroud)

myscript.js

 alert($("#extension-command-list").val());    //undefined
 alert($("#extension-command-list").html());   //undefined
 $(document).ready(function() {
    alert("hello world");  //not seen
 });
Run Code Online (Sandbox Code Playgroud)

编辑:

"background": { "scripts": ["jquery-1.9.1.min.js"] },

 "content_scripts": [
 {
  "matches": ["https://*/*"],
  "js": ["myscript.js"]   or "js": ["jquery-1.9.1.min.js","myscript.js"]
 }
],
Run Code Online (Sandbox Code Playgroud)

Mor*_*ler 6

你得到的原因undefined是因为你没有指定背景页面.

那么.. Chrome生成的背景页面,看起来就像

<html>

    <head></head>

    <body>
        <script src="jquery-1.9.1.min.js"></script>
        <script src="myscript.js"></script>
    </body>

</html>
Run Code Online (Sandbox Code Playgroud)

如你所见,没有任何元素可以选择,这就是为什么你的第一个也会alert回归undefined.

无论如何,也alert("hello world")应该显示,因为DOMContentLoaded 或者类似的应该以任何方式解雇.


您是否想要选择正在访问的网站的元素?

如果是这样,你应该把myscript.js内容脚本,而不是一个背景页.在那里,您可以访问该站点的DOM.


所以问题是,你在忙什么?


如果你真的想在你的背景页面中选择元素,你必须指定一个,查看背景页面网站显示你,它就像:

{
"name":"我的扩展程序",
...
"背景":{
"page":"background.html"
},
...
}

编辑:

  • "default_popup":"popup.html"

引用浏览器操作弹出窗口.使用浏览器Action

[...]将图标放在地址栏右侧的Google Chrome主工具栏中.除了图标外,浏览器操作还可以包含工具提示,徽章和弹出窗口.

所以

如果浏览器操作有弹出窗口,则在用户单击图标时会显示弹出窗口.弹出窗口可以包含您喜欢的任何HTML内容,并且它会自动调整大小以适合其内容.要在浏览器操作中添加弹出窗口,请使用弹出窗口的内容创建HTML文件.在清单中的browser_action的default_popup字段中指定HTML文件,或调用setPopup方法.

  • "背景":"{...}"

扩展的常见需求是使用单个长时间运行的脚本来管理某个任务或状态.救援背景页面.
正如架构概述所解释的那样,后台页面是一个在扩展过程中运行的HTML页面.它存在于扩展的生命周期中,并且一次只有一个实例处于活动状态.

还可以使用后台脚本访问Chrome Extension的Api的所有部分. chrome.* 如果您已分别请求权限


现在让我们说,您希望例如使用某些功能扩展chrome的ContextMenu.

为此,首先要在后台页面中创建一个contextMenuEntry.
就如同你的后台页面只有一个是同时运行的情况下,这对于寿命的延长,因此应该将contextMenuEntry只能有一个它的实例,它被创建时,您的扩展运行,并保持了一生的你的扩展.

现在假设您要在其中一个菜单项中显示您正在访问页面的当前所选文本.

要做到这一点,你需要访问chrome.contextMenusAPI方法,但一个contentscript是不是允许使用这个.

要使其工作,您需要通过例如将带有所选文本的消息传递背景页面chrome.extension.sendMessage

在后台页面,您可以再更新现有 contextmenuentry显示选定的文本.

我现在想不出一个更好的例子