覆盖document.title,然后使用原始方法

时间:2016-10-14 13:29:05

标签: javascript

问题是我有一个组件(不是我的代码,所以我无法改变它)调用document.title =""。当然我不会允许这样做,所以我的计划是覆盖document.title方法并检查一个空字符串。但是如何处理使用overriden方法设置document.title = Correct Title的调用。

到目前为止,这是我的代码:

var actualTitle = document.title;

Object.defineProperty(document, 'title', {
    set: function (newValue) {
        if(newValue != ""){
            document.title = newValue;
        }
    },

    get: function () {
        return actualTitle;
    }
});

此代码进行无限循环,因为该方法将其称为self。但我需要在set方法中设置标题。

我是否可以使用某种超级方法,例如Java。

3 个答案:

答案 0 :(得分:0)

一个简单的旗帜会吗?

var actualTitle = document.title,
    isModified = false;

Object.defineProperty(document, 'title', {
    set: function (newValue) {
        isModified = true;
        if(newValue != "" && !isModified){
            document.title = newValue;
        }
    },

    get: function () {
        return actualTitle;
    }
});

答案 1 :(得分:0)

您可以通过使属性不可写(这是默认值)并为其提供您喜欢的值来停止修改标题:



function lockDocumentTitle() {

  // extract the initial value
  var actualTitle = document.title;

  // override the property to always have that value
  Object.defineProperty(document, 'title', {
    value: actualTitle,
    /* 
    By default:
      - not enumerable
      - not configurable
      - not writable
    */
  });
}

console.log(document.title);             // ''
document.title = 'Test';     
console.log('Set to ' + document.title); // 'Test'

lockDocumentTitle();

document.title = 'Something Else';       // no effect
console.log('Still ' + document.title);  // its still 'Test'




答案 2 :(得分:0)

Object.defineProperty

工作原理:

当我使用document.title = "lorem ipsum dolor sit amet"时,页面的标题在您使用document.getElementsByTagName("title")[0].innerHTML时不会发生变化。所以,让我们破解它。

我们还有另一种更改标题的方法:document.getElementsByTagName("title")[0].innerHTML。因此,每当document.title的值发生变化时,我们都会更改document.title = ""的值。但是你讨厌if(newValue != "")所以让我们忽略<div id="loader"> <div id="loaderContent" > <img src="/im/loader.gif" /> <p>Traitement en cours...</p> </div> </div>