$不只在某些网站上定义为firefox插件

时间:2019-03-03 19:37:25

标签: javascript jquery firefox firefox-addon

我做了一个扩展,可以对页面进行DOM操作。该扩展程序可以在chrome上正常运行,但是内容脚本中的jquery无法在firefox中的某些网站(如Facebook,quora和nytimes only )上加载。我可以使用javascript来操纵DOM,但不能使用jquery来操纵。

  

jQuery.Deferred异常:$未定义mainReady @ moz-extension:// 39071a01-> 0540-46e3-b16e-96bd576ca827 / content.js:81:5   @ moz-extension://39071a01-0540-46e3-b16e-96bd576ca827/content.js:139:13   l @ moz-extension:// 39071a01-0540-46e3-b16e-96bd576ca827 / jquery-> 3.3.1.min.js:2:29373   延迟/然后/a/3.3.1.min.js:2:29677   未定义

我在这些网站的控制台中收到上述错误。错误指向mainready()中的第一行jQuery。这行代码是用于更改body backgroundColor的基本jQuery。 这是所有代码的GitHub链接:https://github.com/rishabhmw/sauron

内容脚本的方法:

chrome.runtime.sendMessage({ type: "ToggleQuery", origin: "ContentScript" }, function(callbackResponse){
if(callbackResponse.action == "On"){
    main();
    $(document).ready(function(){
        mainReady();
        //WHAT'S NEW AND LOADING TRANSITIONS OVER, MANIPULATE ONCE MORE. STOPGAP SOLUTION.
        setTimeout(function(){mainReady();}, 500);
    });        
}});

清单:

{
"manifest_version": 2,
"name": "Sauron - Dark mode for all websites",
"version": "1.1",
"author": "Rishabh Maheshwari",
"description": "Beautiful dark mode for all websites. Open Source, Free and Secure. Protect your eyes when you surf in dark enviroments.",
"browser_action":{
    "default_popup": "popup.html"
},
"icons": { 
    "16": "icon16.png",
    "48": "icon48.png",
    "128": "icon128.png" 
},
   "background":{
        "scripts": ["background.js"],
        "persistent": false
    },
    "content_scripts": [
        {
            "matches": ["<all_urls>"],
            "run_at": "document_start",
            "all_frames":true,
            "js": [ "jquery-3.3.1.min.js","mutation-summary.js","sauron-library.js","content.js"]

    }
],
"permissions": [
    "tabs",
     "*://*/*",
    "storage"
]




}

1 个答案:

答案 0 :(得分:0)

问题似乎源于实例jQuery冲突或加载的Jquery脚本冲突。由于扩展中的所有脚本本身都可以和谐地工作,因此问题一定出在Firefox中。似乎Firefox没有为插件脚本和网页脚本定义不同的作用域。无论如何,只需要一点noConflict()魔术。

var some_name_jQuery = $.noConflict();

,然后使用该名称代替$