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

IT技术 javascript google-chrome-extension trello
2021-03-02 06:23:39

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

console.log("Hello, world!");

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

我的清单文件包含:

{
  "manifest_version": 2,

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

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

谁能帮我弄清楚为什么在最初加载页面时脚本没有运行?

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

2个回答

问题在于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"
  ]
}

添加后台脚本:

chrome.webNavigation.onHistoryStateUpdated.addListener(function(details) {
    chrome.tabs.executeScript(null,{file:"contentscript.js"});
});
finallllllllly,一种实际有效的方法。你不知道我一直在寻找这样的东西多久。那里有很多无用的“解决方案”
2021-04-20 06:23:39
这对我非常有用。GitHub 做同样的事情。我唯一的区别是我必须更改 manifest.json 中的 "matches": 属性。以前我只通过内容脚本加载*://github.com/*/*.wiki. 我正赶上上的过渡状态推出的一个github.com/*页面,但因为我没有加载的wiki页面我不能调用内容脚本。我改变了manifest.json"content_scripts": [ { "matches": ["*://github.com/*"], ...
2021-04-21 06:23:39
也适用于我,但我需要它用于 Firefox。我把它改成:browser.webNavigation.onHistoryStateUpdated.addListener(function(details) {browser.tabs.executeScript(null,{file:"contentscript.js"});});而且permissions很重要。我忘记设置它们并收到未定义的错误。
2021-05-03 06:23:39
想要回应这个解决方案很棒。它在程序化和声明性内容脚本之间取得了很好的平衡。您可以为页面重新加载事件保留以声明方式注入的内容脚本,这很好,因为它们更易于调试。同时还处理推边情况!
2021-05-12 06:23:39

它非常适合我。我用你展示的两个文件创建了扩展:

清单.json:

{
  "manifest_version": 2,

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

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

内容脚本.js:

console.log("Hello, world!");

然后我在这个搜索线程中打开第三个链接:https://www.google.ca/search?q=trello+board+game&oq=trello+board+game&aqs=chrome..69i57.5037j0j1&sourceid=chrome&ie=UTF-8 ("权力的游戏:棋盘游戏 - Trello”)和 Chrome DevTools 控制台写“你好,世界!”