将文字附加到标题标题?

时间:2013-03-06 19:22:06

标签: javascript google-chrome google-chrome-extension

我希望我的扩展程序在标签标题的末尾附加一个小文本标签(类似“(已录制!)”),以向用户表明它已注意到已查看给定标签。以下代码似乎在调试器中工作(也就是说,调试器告诉我在if条件完成后tab.title是[tab.title +(Recorded!)],但chrome中的选项卡的标题不是改变。我是否需要使用代码刷新选项卡才能看到标题中的更改?如果是这样,如何在不再使用onUpdated侦听器的情况下执行此操作?如果没有,我该怎么办?

// get title of updated tab, increment if it has "NYTimes.com" in it (crude equivalent for article)
chrome.tabs.onUpdated.addListener(function(url, changeInfo, Tab)
{
    chrome.tabs.getSelected(null, function(tab) 
    {
        var title = tab.title;

        if (title.indexOf("NYTimes.com") != -1 && changeInfo.status == "complete")
        {
            tab.title = title + ' (Recorded!)';
            localStorage.setItem('nyt', ++nytCount);
        }
    });
});

2 个答案:

答案 0 :(得分:1)

您必须使用内容脚本才能执行此操作。 chrome.tabs API仅提供对标签信息的只读访问权限。

似乎编程注入(https://developer.chrome.com/trunk/extensions/content_scripts.html#pi)适用于您的情况。

因为内容脚本是在一个孤立的世界(https://developer.chrome.com/trunk/extensions/content_scripts.html#execution-environment)中执行的,所以你需要注入< script>进入页面并通过在那里设置document.title来修改标题。

以下是一个示例(替换tab.title = title + ' (Recorded!)';):

chrome.tabs.executeScript(tab.id, {code: 
    "var script = document.createElement('script');" + 
    "script.appendChild(document.createTextNode('" +
    "document.title = document.title + \" (Recoorded!)\";" + 
    "'));" + 
    "document.body.appendChild(script);"});

答案 1 :(得分:1)

我使用了jquery,效果很好。

var title = $(document).prop('title'); 
if (title.indexOf('new prefix') == -1) {
    $(document).prop('title', 'new prefix - '+title);
}

但请务必将其包含在manifest.json的内容脚本部分

"content_scripts": [ {
  "js": [ "jquery-3.1.0.min.js", "myscript.js" ],
  "matches": [ "http://*/*", "https://*/*" ]
}]