0

我目前正在使用WebExtension,并遇到一个小问题。在我的Firefox浏览器中,我可以导入并运行我的工作,而不会出现任何错误/警告。然而,对于谷歌浏览器,我有一个关于未实现的功能的重大警告(browser_style属性manifest.jsonoptions_ui)。在WebExtension的manifest.json中检测导航器

我想创建一些类似于基于导航器名称的if语句,以便不在Chrome上设置此属性,但将其保留在Firefox上。

这里是我的manifest.json部分:

"options_ui": {                                          
"page": "contents/settings.html",                                    
"browser_style": true                                      
}, 

这里是想什么,我有(不工作):

"options_ui": {                                          
"page": "contents/settings.html", 
if (options_ui.browser_style) {                               
    "browser_style": true  
    }                                     
},  

如何创建这样一个条件的任何想法这在一个manifest.json文件?

+2

JSON用于静态数据存储并且没有条件。你将需要单独的文件。 –

回答

0

由于Daniel Herr implied in a commentmanifest.json文件是直JSON格式的数据。 JSON无法运行代码。动态定义您的清单文件中的属性是不可能的。你有两个选择:

  1. 住在警告(S)。
    Chrome和Firefox都具有有效的属性,其定义为manifest.json其他文件不支持的文件。当有不受支持的属性时,两者都会显示警告。这些是只有警告并且不会导致浏览器阻止扩展运行。 Chrome在chrome:// extensions/中突出显示了这些内容。 Firefox在Browser Console(Ctrl-Shift-J或OSX上的Cmd-Shift-J)中显示它们。
  2. 每个浏览器都有一个单独的manifest.json文件。
    这为您的构建/开发过程增添了一些复杂性,但可以让您在每个浏览器中消除这些警告。

注意:即使你不不同的manifest.json文件提交给谷歌(Chrome网上应用店 - 扩展)和Mozilla(AMO),通过扩展包分配给用户的时候, manifest.json扩展包中的文件和其他内容将不同,因为从提交到分发的过程会导致修改该文件和/或将其他文件添加到扩展包中。

+0

好的,所以有文件名的技巧?像“manifest.chrome.json”和“manifest.firefox.json”?或者我必须创建两个目录?像“my_extension_chrome”和“my_extension_firefox”? – Oscar

+0

@ Xjames56X文件名没有技巧。您需要以其他方式处理它。但是,在准备提交给Google/Mozilla的软件包时(假设您在大部分开发期间可以接受警告),您只需要这样做。这可以自动为每个使用适当过滤的manifest.json版本。 – Makyen

+0

谢谢。太糟糕了,webExtensions的目的是要标准化的,对吧? – Oscar