Chrome扩展程序可检测当前标签的区域设置

时间:2014-07-30 10:25:17

标签: javascript google-chrome-extension

我想显示所选标签的区域设置(html源代码的lang属性),并将其显示在我的Chrome-Extension的popup.html中。这样做。我的popup.html是:

<div id="pageLocale">Page Locale is: <b>  <script src="write.js"></script></b></div>

我的write.js是:

chrome.tabs.executeScript(null,{code:"document.write(document.documentElement.lang)"});

如果我使用它,我会将所选标签的内容全部留空,只显示区域设置字符串。我明白这里有什么问题。 我想知道,我如何使用&#34; document.documentElement.lang&#34;提取lang属性。对于当前选项卡并将其返回到我的popup.html。单击chrome-extension图标时,选中的当前选项卡不应为空白。请帮帮我们。

1 个答案:

答案 0 :(得分:0)

通过调用document.write中的chrome.tabs.executeScript,您将覆盖文档的内容(正如您所观察到的那样)。通常,您不应使用document.write

并且不要使用document.documentElement.lang,因为如果页面没有设置,它可以为空。相反,请使用chrome.tabs.detectLanguage。这是一个例子:

// write.js
(function() {
    var thisScriptElement = document.currentScript;
    chrome.tabs.detectLanguage(null, function(language) {
        var node = document.createTextNode(language);
        // Replace <script> with the text
        thisScriptElement.parentNode.replaceChild(node, thisScriptElement);
    });
})();

如果确实想要获取lang属性的值(即使它是一个空字符串),那么您需要使用chrome.tabs.executeScript,如下所示:< / p>

// write.js
(function() {
    var thisScriptElement = document.currentScript;
    chrome.tabs.executeScript(null, {
        code: 'document.documentElement.lang;'
    }, function(result) {
        var language = result[0]; // Last expression's result in the top frame.
        var node = document.createTextNode(language);
        // Replace <script> with the text
        thisScriptElement.parentNode.replaceChild(node, thisScriptElement);
    });
})();