Javascript 闪烁的document.title和IE7(不可能?)

Javascript 闪烁的document.title和IE7(不可能?),javascript,dom,internet-explorer-7,Javascript,Dom,Internet Explorer 7,我开发了一个网站,我需要让文件标题闪烁时,浏览器失去了重点,以获得用户的注意 这是一项常见的任务,例如在某些社交网络中。顺便说一句,我的javascript代码在Chrome、Firefox、Opera中运行良好,但在IE7(我在发布网站之前正在测试)中则不行 IE7有一个奇怪的行为,因为如果我在调试文本中打印document.title(您可以在代码中看到),它会被更改,但浏览器仍然显示以前的文档标题 我试图在互联网上搜索很多东西来解决这个问题,但运气不好,所以我决定在这个网站上发布这个问题。

我开发了一个网站,我需要让文件标题闪烁时,浏览器失去了重点,以获得用户的注意

这是一项常见的任务,例如在某些社交网络中。顺便说一句,我的javascript代码在Chrome、Firefox、Opera中运行良好,但在IE7(我在发布网站之前正在测试)中则不行

IE7有一个奇怪的行为,因为如果我在调试文本中打印document.title(您可以在代码中看到),它会被更改,但浏览器仍然显示以前的文档标题

我试图在互联网上搜索很多东西来解决这个问题,但运气不好,所以我决定在这个网站上发布这个问题。下面是我的javascript代码,并提前感谢您的建议

JS方法由this.blink调用(true)

//上面和下面的其他方法。。。。
this.blink=功能(动作)
{
如果(行动)
{
如果(!this.blinking)
this.oldTitle=top.document.title;
其他的
clearInterval(这个.blinkTimer);
//调试当前标题
$('debugText')。值='ORIGINAL'+top.document.title+'\n'+$('debugHistory')。值;
this.blinkTimer=setInterval(函数(){
var msg='msg',newTitle
if(top.document.title==msg)
newTitle='---';
其他的
newTitle=msg;
//转让所有权
top.document.title=newTitle;

//调试闪烁,实际上已更改,但未显示而不是
top.document.title
try
top.document.getElementsbyTagName('title')[0]
(假设top是某种形式的框架或窗口)

在IE中尝试此操作

this.blink = function (Action)
{
     if (Action)
    {

        if (!this.blinking)
            this.oldTitle=top.document.title;
        else
            clearInterval(this.blinkTimer);


        this.blinkTimer = setInterval(function() {

            var msg='MSG', newTitle

            if (top.document.title == msg)
                newTitle =  '----';
            else
                newTitle =  msg;

            // assign title
        top.document.title =  newTitle;


         }, 1000);

    }
    else
    {
        clearInterval(this.blinkTimer);

        if (this.blinking)
            top.document.title = this.oldTitle;
    }

    this.blinking = Action; 
}
  window.blink('now');​​​​

大多数情况下,window.onblur等不会触发您的闪烁功能是一个问题。如果上述功能正常,那么您可以使用鼠标移动来跟踪超时。

如果您使用jQuery,我制作了一个插件,用于在浏览器标题栏中闪烁通知消息。使用它,您可以指定不同的选项,如duration、闪烁间隔、当窗口/选项卡聚焦时是否应停止闪烁等。我已验证该插件在IE6、IE7、IE8、Firefox、Chrome和Safari中工作

下面是一个关于如何使用它的示例:

$.titleAlert("New chat message!", {
    requireBlur:true,
    stopOnFocus:true,
    interval:600
});

如果您不使用jQuery,您可能仍然希望查看(如果您想完全支持所有主要浏览器,在执行标题闪烁时需要处理一些奇怪的bug和边缘情况).

Aargh,闪烁的东西!你确定要惹恼你的用户吗?最有可能的是,该功能根本不会被你的window.blur或等效程序触发,这就是为什么会发生这种情况。请尝试在不使用模糊标准的情况下执行上述代码,即强制运行,看看窗口标题栏是否会更改?@Piskvor:如果我们知道,我同意你的看法此时,闪烁是无用的,但用于闪烁的有效应用程序数量有限,例如传入的即时消息。要添加到Alec,blur应该可以工作,但只有在窗口上,而不是文档上才可以。@MvanGeest:你是对的。我的主观意见是闪烁==恼人,但我假设闪烁可能存在有效的用例。您好lex,首先感谢你的建议,我在IE7上尝试了这个方法:document.getElementsbyTagName('title')[0]=newTitle和document.getElementsbyTagName('title')[0]。text=newTitle在这两种情况下IE都会抛出一个错误:“对象不支持此属性或方法”(我使用IE工具栏调试/Companion JS debugger/debugger Bar尝试调试IE7)我还尝试使用prototype.js($$相当于getElementsbyTagName)$$('title')[0]。在本例中,text=newTitle适用于除IE以外的所有浏览器:(没有出现任何错误,但没有任何与之前相同的效果document.title=newTitleLook就像IE7没有焦点一样,无法更改标题栏,可能是为了防止网络钓鱼之类的安全问题?我会检查IE中的所有选项,并设置测试的低安全性,但仍然不幸运。在现实中,我不喜欢IE7,但我必须支持它,因为l许多用户正在使用IE 7.Luka,
.text
不是属性。您要更改
文档。getElementsbyTagName('title')[0]。childNodes[0].nodeValue
,它是文本节点本身。@Eli,感谢您的建议,我以前尝试过
.text
,因为我通过在Firefox中检查Firebug注意到了该属性。我还尝试了您的建议,如
文档.getElementsbyTagName('title')[0]。childNodes[0].nodeValue=newTitle
但IE7仍然抛出错误
对象不支持此属性或方法
。似乎IE7在DOM中工作得非常糟糕。似乎很难更改文档标题,这对我的意见很容易,但对IE来说不是,更多建议?我没有希望:)我刚刚注意到原始海报的
getElementsbyTagName
大写错误。这是
getElementsbyTagName
。如果这没有帮助,还可以尝试更改IE中标题节点的
.innerHTML
.innerText
。感谢Alec的建议,实际上我更喜欢监视有关focus的事件我在上面添加的评论文章中提到了这一点,但我肯定也会尝试你的建议:)实际上,我上面发布的代码更长,事件触发得很好,因为在调试文本区域我看到了更改和闪烁,如果你注意到我上面的代码文章,奇怪的是这一行
$('debugText')).value='BLINK'+top.document.title
确实显示了预期的闪烁文本,并且来自title属性,但在IE7中,标题栏未显示,仍然显示正常标题,没有任何更改。
$.titleAlert("New chat message!", {
    requireBlur:true,
    stopOnFocus:true,
    interval:600
});