36

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

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

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

我的清单文件包含:

{
  "manifest_version": 2,

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

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

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

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

4

2 回答 2

59

问题是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"});
});
于 2014-01-12T04:33:41.083 回答
0

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

清单.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 控制台写入“Hello,world!”

于 2014-01-05T19:37:46.147 回答