Javascript 在Firefox加载项中获取浏览器区域设置代码

Javascript 在Firefox加载项中获取浏览器区域设置代码,javascript,firefox,firefox-addon,firefox-addon-sdk,firefox-addon-webextensions,Javascript,Firefox,Firefox Addon,Firefox Addon Sdk,Firefox Addon Webextensions,我正在开发一个Firefox插件。我需要确定用户浏览器中设置的语言。 是否存在类似于window.navigator的对象,其中包含浏览器的当前区域设置?访问区域设置的方法 使用窗口导航器: 虽然可能还有其他东西,但你可以使用它 只能在与内容相关联的窗口对象上使用(即,不是浏览器的XUL窗口)。但是,即使需要从内容脚本访问该对象,该对象也可用于所有扩展类型 :您需要从内容脚本访问它 所有其他类型:即使在多进程Firefox中,也可以从主/后台脚本访问window.navigator。像在扩展中

我正在开发一个Firefox插件。我需要确定用户浏览器中设置的语言。
是否存在类似于
window.navigator
的对象,其中包含浏览器的当前区域设置?

访问区域设置的方法 使用
窗口导航器

虽然可能还有其他东西,但你可以使用它

只能在与内容相关联的
窗口
对象上使用(即,不是浏览器的XUL
窗口
)。但是,即使需要从内容脚本访问该对象,该对象也可用于所有扩展类型

  • :您需要从内容脚本访问它
  • 所有其他类型:即使在多进程Firefox中,也可以从主/后台脚本访问
    window.navigator
    。像在扩展中一样,必须使用正确的
    对象。并非所有的
    对象都具有
    导航器
    属性
获取Firefox首选项:
但是,其中一个似乎是首选项
general.useragent.locale
,或者可能是
intl.accept\u语言。您正在编写的加载项类型将决定您如何访问此加载项,或者即使它当前可用:

  • 扩展可以使用访问它们
  • 或附加组件可以使用,这使您可以访问和
  • 此时,似乎没有访问首选项的权限。考虑到Firefox的整体首选项,它们在未来可能会提供
在ChromeWidow上使用
getLocale()

正如stkvtflw所提到的,您还可以在主ChromeWindow上使用
getLocale()
。(不要混淆)包含一个函数。但是,似乎没有关于这一职能的任何正式文件。其代码为:

function getLocale() {
  try {
    let chromeRegistry = Cc["@mozilla.org/chrome/chrome-registry;1"]
                           .getService(Ci.nsIXULChromeRegistry);
    return chromeRegistry.getSelectedLocale("browser");
  } catch (ex) {
    return "en-US";
  }
}
显然,这表明如果需要,您可以直接使用
nsIXULChromeRegistry
服务。似乎也没有关于这项服务的正式文件

WebExtensions特定方法:
WebExtensions具有,可从后台脚本获得。可通过以下方式获取本地文件:。这种方法可能也很有趣

WebExtensions加载项的完整代码 main.js

let locale=chrome.i18n.getUILanguage();
log('区域设置为:'+区域设置);
manifest.json

{
“描述”:“将区域设置记录到控制台”,
“清单版本”:2,
“名称”:“日志语言环境”,
“版本”:“0.1”,
“应用程序”:{
“壁虎”:{
“id”:”extention@stick.man",
“严格的最低版本”:“45.0”
}
},
“背景”:{
“脚本”:[“main.js”]
}
}
附加SDK扩展的完整代码 index.js:

//从当前窗口/选项卡获取window.navigator
//获取当前活动的浏览器窗口
让activeWindow=require('sdk/window/utils')。getMostRecentBrowserWindow();
//activeWindow.document.defaultView是您要使用的
让defaultViewNavigator=activeWindow.document.defaultView.navigator;
//从window.navigator记录语言
log('navigator language='+defaultViewNavigator.language);
//从首选项获取区域设置:
让prefs=require(“sdk/首选项/服务”);
让langFromPref=prefs.get(`general.useragent.locale`);
log('language from prefs='+langfrom pref);
//使用getLocale()获取区域设置:
让localeGet=require(“sdk/window/utils”).getMostRecentBrowserWindow().getLocale()
log('getLocale language='+localeGet);
package.json:

{
“标题”:“查找区域设置”,
“名称”:“查找本地”,
“版本”:“0.0.1”,
“描述”:“查找区域设置”,
“main”:“index.js”,
“作者”:“Makyen”,
“发动机”:{
“firefox”:“>=38.0a1”,
“fennec”:“>=38.0a1”
},
“许可证”:“麻省理工学院”,
“关键词”:[
“喷气背包”
]
}
引导/遗留加载项的代码
//导入服务
Components.utils.import(“resource://gre/modules/Services.jsm");
//获取当前活动的浏览器窗口
让activeWindow=Services.wm.getMostRecentWindow(“导航器:浏览器”);
//从当前窗口/选项卡获取window.navigator
//activeWindow.document.defaultView是您要使用的
让defaultViewNavigator=activeWindow.document.defaultView.navigator;
log('navigator language='+defaultViewNavigator.language);
//从首选项获取区域设置:
让langFromPref=Services.prefs.getCharPref(`general.useragent.locale`);
log('language from prefs='+langfrom pref);
//使用getLocale()获取区域设置:
让localeGet=activeWindow.getLocale()
log('getLocale language='+localeGet);
访问区域设置的方法 使用
窗口导航器

虽然可能还有其他东西,但你可以使用它

只能在与内容相关联的
窗口
对象上使用(即,不是浏览器的XUL
窗口
)。但是,即使需要从内容脚本访问该对象,该对象也可用于所有扩展类型

  • :您需要从内容脚本访问它
  • 所有其他类型:即使在多进程Firefox中,也可以从主/后台脚本访问
    window.navigator
    。像在扩展中一样,必须使用正确的
    对象。并非所有的
    对象都具有
    导航器
    属性
获取Firefox首选项:
但是,其中一个似乎是首选项
general.useragent.locale
,或者可能是
intl.accept\u语言。您正在编写的加载项类型将决定您如何访问此加载项,或者即使它当前可用:

  • 扩展可以使用访问它们
  • 或附加组件可以使用,这使您可以访问和
  • 此时,请勿使用ap