在刷新页面之前,Chrome扩展内容脚本未加载

Nat*_*ard 26 javascript google-chrome-extension trello

我有一个Chrome扩展程序内容脚本,我想在Trello主板上运行.目前,它仅包含:

console.log("Hello, world!");
Run Code Online (Sandbox Code Playgroud)

当您通过内部链接打开Trello板页面时,例如从"我的板"页面,内容脚本不会运行.它会在您刷新页面后运行.

我的清单文件包含:

{
  "manifest_version": 2,

  "name": "Temp Ext",
  "version": "1.0",

  "content_scripts": [
    {
      "matches": ["*://trello.com/b/*"],
      "js":["contentscript.js"]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我弄清楚为什么脚本在页面最初加载时没有运行?

编辑:更正的问题.仅在关注内部链接后发生问题,而不是任何链接.

Nat*_*ard 43

问题是Trello使用HTML5的pushState进行页面转换,因此在打开电路板后并不总是运行内容脚本.

清单的变化:

{
  "manifest_version": 2,

  "name": "Temp Ext",
  "version": "1.1",

  "content_scripts": [{
    "matches": ["*://trello.com/*"],
    "js":["contentscript.js"]
  }],

  "background": {
    "scripts": ["background.js"]
  },

  "permissions": [
    "*://trello.com/*", "tabs", "webNavigation"
  ]
}
Run Code Online (Sandbox Code Playgroud)

添加后台脚本:

chrome.webNavigation.onHistoryStateUpdated.addListener(function(details) {
    chrome.tabs.executeScript(null,{file:"contentscript.js"});
});
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说非常有用.GitHub做同样的事情.我唯一的区别是我必须更改manifest.json中的"matches":属性.以前我只是通过内容脚本加载`*://github.com/*/*.wiki`.我正在查看`github.com/*`页面的转换_out上的状态推送,但由于我没有加载维基页面,我无法调用内容脚本.我将`manifest.json`更改为```"content_scripts":[{"matches":["*://github.com/*"],...``` (2认同)
  • *finallllllllly*,一种实际可行的方法.你不知道我多久都在寻找这样的东西.那里有那么多哑剧"解决方案" (2认同)