簡體   English   中英

JQuery和Chrome擴展

[英]JQuery and Chrome Extension

我正在嘗試開發測試chrome擴展,以了解JQuery如何使用chrome擴展。 從提供的代碼我認為它應該將彈出窗口的背景更改為黃色。

我嘗試使用內容腳本並使用背景加載jquery.js。 當我通過后台腳本命令加載它時,它顯示已加載jquery.js。

這是我的文件:

的manifest.json

    {
  "name": "Hello World!",
  "version": "1.0",
  "manifest_version": 2,
  "description": "My first Chrome extension.",
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "content_scripts": [
    {
      "matches": ["http://www.google.com/*"],
      "js": ["jquery.js", "content.js"]
    }
  ]
}

popup.html

    <html>
  <head>
    <script src='jquery.js'></script>
    <script src='content.js'></script>
  </head>
</html>

content.js

$('a').css({'background-color': 'yellow'});

我的擴展文件夾中也有jquery.js。 如果有人要么給我一些其他東西來試圖讓這個工作,或者可以向我展示一個鏈接jquery的chrome擴展的一個非常好的工作示例,那就太棒了!

你一直缺乏混合的東西,不應該在一起。

你做錯了一件事:
由於您不希望在單擊瀏覽器操作按鈕時顯示彈出窗口,因此不應指定“default-popup”:

...
"browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"   // <-- this line should go away
},
...

話雖如此,解決問題的最佳方式(imo)如下:

  1. 讓您的背景頁面(或更好的事件頁面 )監聽chrome.browserAction.onClicked事件。
    (請注意,為了觸發事件,不能設置默認彈出窗口。)

  2. 發生這種情況時,使用編程注入jquery.min.jscontent.js注入活動選項卡的頁面,使用chrome.tabs.executeScript

  3. 為了使上述步驟成為可能,您還必須聲明必要的權限 ,即"tabs"和擴展程序應該可訪問的頁面的URL 匹配模式 (例如"http://*/*""https://*/*"可以訪問具有httphttps方案的所有頁面。

我還建議,仔細查看清單規范 ,以便熟悉可用字段和可能的值。


最后,一些演示源代碼可以幫助您入門(我立刻知道所有這些信息可能會讓您感到壓力):

擴展文件夾結構:

       _______________LinkHighlighter_______________
      |                      |                      |
manifest.json               img                     js
                             |                      |__background.js
                        icon<XX>.png(*)             |__content.js
                                                    |__jquery.min.js
(*): <XX> = 16, 19, 38, 48, 128

manifest.json的:

{
    "manifest_version": 2,

    "name": "Link Highlighter",
    "version": "1.0",
    "description": "...",
    "icons": {
         "16": "img/icon16.png",
         "48": "img/icon48.png",
        "128": "img/icon128.png"
    },

    "browser_action": {
        "default_title": "Link Highlighter",
        "default_icon": {
            "19": "img/icon19.png",
            "38": "img/icon38.png"
        }
    },
    "background": {
        "persistent": false,
        "scripts": ["js/background.js"]
    },

    "permissions": [
        "tabs",
        "http://*/*",
        "https://*/*"
    ]
}

background.js:

// When the user clicks the browser-action button...
chrome.browserAction.onClicked.addListener(function(tab) {
    // ...inject 'jquery.min.js' and...
    chrome.tabs.executeScript(tab.id, {
        file: "js/jquery.min.js",
        allFrames: true,
        runAt: "document_idle"
    });
    // ...inject 'content.js' into the active tab's page
    chrome.tabs.executeScript(tab.id, {
        file: "js/content.js",
        allFrames: true,
        runAt: "document_idle"
    });
});

content.js:

$("a").css({ "background-color": "yellow" });

如果您有其他問題/問題,請不要猶豫回來:)


為了完整起見......
......我只想提一下其他方法是否可行,如下:

  1. 使用頁面操作而不是瀏覽器操作。

  2. 使用內容腳本注入每個頁面,並通過從后台頁面到內容腳本的消息傳遞來觸發突出顯示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM