使document.title不可用于Javascript
是否可以使Javascript无法更改使document.title不可用于Javascript,javascript,jquery,html,Javascript,Jquery,Html,是否可以使Javascript无法更改文档.标题(。)呢 我的问题是,在我的项目中,有一些Java脚本每1秒更改document.title,我希望title保持不变。不幸的是,我无法更改或删除这些JS文件。我试着想出一些变通办法,比如: function checkTitle() { if(document.title != oldTitle) document.title = oldTitle; } setInterval(checkTitle(), 100); 这似乎是一个好主意,但不幸
文档.标题(。
)呢
我的问题是,在我的项目中,有一些Java脚本每1秒更改document.title
,我希望title保持不变。不幸的是,我无法更改或删除这些JS文件。我试着想出一些变通办法,比如:
function checkTitle() {
if(document.title != oldTitle)
document.title = oldTitle;
}
setInterval(checkTitle(), 100);
这似乎是一个好主意,但不幸的是,我还有一个计数器,可以在我的网站上显示计时器。我的整个代码如下所示:
var ticks = 0;
function update() {
if(ticks % 1000 == 0) {
...update timer and some other stuff...
}
ticks+=100;
if(document.title != oldTitle)
document.title = oldTitle;
}
setInterval(update, 100);
在+-100秒后,这样的代码会变慢,我的计时器肯定不会每1秒更新一次
所以问题是:是否有可能使html元素(..)不可能为javascript更改,如果没有,是否有解决问题的方法
提前感谢。这可能会有一些副作用,但我不确定具体是什么,但您可以重新定义title
属性并使其不可写,这比密封或冻结整个文档要好,因为它只影响title
Object.defineProperty(document, 'title', {
enumerable: false,
configurable: false,
writable: false,
value: document.title
});
这应该适用于IE9及以上的所有浏览器,也可能适用于IE8,我还没有测试过,但我认为只有DOM节点可以在IE8中更改,并且不确定文档是否计数?您可以将以下事件绑定到您的标题标记以防止更改自身:
$(document).ready(function() {
$('title').bind('DOMSubtreeModified propertychange', function() {
var title = $('title');
if(title.text() != 'old title')
{
alert('title changed');
}
});
$('a').bind('click', function() {
$('title').text('new title');
});
});
为什么你不能删除更改文档标题的部分?一个有趣的问题。更改页面标题/阻止此更改背后的逻辑是什么?出于好奇,你可以听听上面提到的propertychange,因为我的项目是使用Liferay Portal完成的。Liferay在每个页面中添加了一些JS文件来控制一些会话内容,但并不确切。事实上,我听说有一种方法可以更新这些文件,但这并不容易,目前我正在Liferay论坛上等待回应——但看起来好像没有人会回应。像这样(确实有副作用)->哇,太有趣了。对副作用也很好奇,但我想不出任何副作用!Document.title似乎是不相关的元素,因此它应该破坏任何内容。我会检查此解决方案并返回给您-谢谢。我也不能真正想到任何副作用,只是锁定文档属性听起来不像您通常想要做的事情,所以我添加了一个“免责声明”?在我的项目中真正进行测试之前,我决定将其标记为可接受答案,因为它看起来不那么明显,而且我在其他地方也没有看到:谢谢。只是绝对确定:如果我把这段代码放在一个JS中,并添加到每个页面(就像那些想要更改标题的JS文件一样),标题应该保持不变且不可触摸?@pzeszko-它应该,而且它会,只要上面的代码在脚本试图更改标题之前运行,这就假定您首先运行代码,但前提是它已经尽可能好了。例如,一个扩展或一个确定的用户可以很容易地覆盖它。