防止其他脚本设置window.title?

时间:2013-08-13 16:50:48

标签: javascript google-chrome-extension

我正在研究chrome扩展,我在onload处理程序中设置了window.title。但是,我正在修改的页面似乎也动态设置了文档标题。有大量的脚本链接在一起。我有什么方法可以阻止其他人修改document.title或其任何变体,而不知道修改的来源是什么?或者,我是否可以通过快速方式查看更改的来源?

3 个答案:

答案 0 :(得分:1)

查看how to listen for changes to the title element?的答案。值得注意的是:

function titleModified() {
    window.alert("Title modifed");
}

window.onload = function() {
    var titleEl = document.getElementsByTagName("title")[0];
    var docEl = document.documentElement;

    if (docEl && docEl.addEventListener) {
        docEl.addEventListener("DOMSubtreeModified", function(evt) {
            var t = evt.target;
            if (t === titleEl || (t.parentNode && t.parentNode === titleEl)) {
                titleModified();
            }
        }, false);
    } else {
        document.onpropertychange = function() {
            if (window.event.propertyName == "title") {
                titleModified();
            }
        };
    }
};

答案 1 :(得分:0)

这个SO answer提出了一种如何监听文档标题更改的技巧。

也许您可以使用该技术创建一个回调,只要其他脚本尝试更改标题,就会将标题更改回您想要的标题。

答案 2 :(得分:0)

我遇到了同样的问题,某些外部脚本被document.title = "..."更改了页面标题

我为此制定了解决方案:

try {
    window.originalTitle = document.title; // save for future
    Object.defineProperty(document, 'title', {
        get: function() {return originalTitle},
        set: function() {}
    });
} catch (e) {}