【问题标题】:Chrome extension for Facebook loads just on refreshFacebook 的 Chrome 扩展程序仅在刷新时加载
【发布时间】:2015-03-03 19:38:01
【问题描述】:

我写了一个应该说“嗨”的扩展程序。 每次用户点击页面时,代码如下:

ma​​nifest.json

{
"name" : "first-ext",
"version" : "1.0",
"manifest_version" : 2,

"permissions":[
    "tabs"
],
"content_scripts":
[
    {
        "matches" : ["https://www.facebook.com/*"],
        "js": ["jquery.js", "f.js"],
        "css": ["style.css"]
    }
]

}

f.js

$(document).ready(function(){ 
    alert("Hi."); 
});

我正在使用这些文件,如果我刷新每个页面,一切正常但是如果我通过单击每个链接更改页面,则脚本不会在新页面上运行。

例如如果打开 Facebook 主页,扩展程序会说“嗨。”; 如果现在我刷新它再次工作。 如果我单击朋友的时间线链接,则浏览器会打开该页面,但扩展程序不起作用。就像脚本没有执行一样。 如果我刷新,它会再次起作用。

这很不寻常,因为我在其他网站上尝试过相同的扩展程序,如果我刷新并通过单击某个链接更改页面,它工作正常。

对不起我的英语。

【问题讨论】:

    标签: javascript jquery facebook google-chrome


    【解决方案1】:

    您应该使用MutationObserver。它将允许您对 DOM 中的更改做出反应。配合TreeWalker使用,效果特别好。

    有关如何使用它的详细信息,请参阅sample extension

    【讨论】:

    • 我还发现了这个:$(elem).bind("DOMSubtreeModified",function(){});。我应该更喜欢哪一个?
    • 这取决于你到底需要什么。 DOMSubtreeModified 事件适用于 IE9+,MutationObserver 适用于 IE11+。但是由于您正在开发 Chrome 扩展程序,我想浏览器兼容性对您来说不是问题。我更喜欢MutationObserver,它为我提供了关于 DOM 中究竟发生了什么变化的更多细节。如果您在更改时更新观察到的节点,DOMSubtreeModified 往往会创建无限循环。
    • 这正是我想要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多