【问题标题】:Chrome extension only runs on refresh, not on page navigation [duplicate]Chrome 扩展程序仅在刷新时运行,而不是在页面导航上运行 [重复]
【发布时间】:2017-01-30 08:51:15
【问题描述】:

我有一个 chrome 扩展,我想在 GitHub 上操作一些 DOM。当我刷新任何给定页面时,一切都按预期工作,但如果我正常导航到该页面,则不会执行脚本。

ma​​nifest.json

{
    "manifest_version": 2,

    "name": "Name",
    "description": "Detailed description",
    "version": "1.3.5",
    "content_scripts": [{
        "matches": ["https://github.com/*/*/issues/*"],
        "js": ["jquery-2.1.0.min.js", "index.js"]
    }],
    "browser_action": {
        "default_icon": "icon.png"
    },
    "permissions": [
        "activeTab",
        "https://ajax.googleapis.com/"
    ]
}

index.js

$(document).ready(function() {
    // DOM manipulating code
    // removed for brevity
});

【问题讨论】:

  • Github 使用 history api 进行站点导航,您必须挂钩 history pushState 功能,How to get notified about changes of the history via history.pushState?
  • @ZigMandel 该帖子中建议的解决方案不适用于我的情况,因此我提出了一个新问题。
  • @James,如果您尝试过某些事情但没有成功,那么您应该在问题中提及它。不这样做只会浪费您请求帮助的人的时间。
  • @james 确实如此,如果您不能准确说明您尝试了什么以及失败了什么,我们将无能为力。

标签: javascript jquery google-chrome google-chrome-extension


【解决方案1】:

当您从另一个页面导航到 GitHub 页面时,页面中的容器会更新,而不是整个页面。

因此,根据我的经验...如果您从存储库的主页开始并切换到问题页面,扩展程序并不总是会注意到此更改。因此,我建议将清单 matches 更改为所有 github 而不仅仅是问题:

{
    "manifest_version": 2,
    "name": "Name",
    "description": "Detailed description",
    "version": "1.3.5",
    "content_scripts": [{
        "matches": ["https://github.com/*"],
        "js": ["jquery-2.1.0.min.js", "index.js"]
    }],
    "browser_action": {
        "default_icon": "icon.png"
    },
    "permissions": [
        "activeTab",
        "https://ajax.googleapis.com/"
    ]
}

如果这不起作用,那么在您的代码中,监视文档中的“pjax:end”事件:

document.addEventListener("pjax:end", function() {
    // run code/call function
});

【讨论】:

  • 什么时候触发“pjax:end”事件?我已尝试实施您的两个建议,但问题仍然存在
  • 这个解决方案应该可行,我使用相同的方法。 @James,确保您已重新加载整个扩展程序和站点(使用 pjax:end 重新注入新的内容脚本)。
  • "pjax:end" 在 GitHub 完成将新内容加载到目标容器后触发。
  • 我无法让这个解决方案发挥作用。我多次重新加载扩展程序,重新启动 chrome,重新启动计算机,但我永远无法在“pjax:end”事件触发时打印 console.log() 消息。
  • 当您更改页面、单击选项卡、转到问题等时应该触发它。您可能必须使用我在示例中显示的纯 javascript,而不是与 jQuery 绑定。跨度>
猜你喜欢
  • 1970-01-01
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 2016-05-25
  • 1970-01-01
相关资源
最近更新 更多