使用“始终在最前面”打开新的浏览器窗口

Jan*_*ski 5 html

我知道这不是一个好的做法 :-) 但我请求打开一个“始终在顶部”的新浏览器窗口。这是一个小的通知/统计窗口,而不是一个广告弹出窗口。

我尝试从主页打开一个新窗口:

<a href="okence.html"  
   onclick="window.open('okence.html', 'newwindow', 'width=400,height=320'); return false;"
>Click</a>
Run Code Online (Sandbox Code Playgroud)

新的 html 文件有:

<html>
    <body>
        <script type="text/javascript" language="javascript">
            onblur = function() {
                setTimeout('self.focus()', 100);
            }
        </script>

        Test
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

新窗口打开,但没有“总是在最前面”。有没有其他办法?或者浏览器不允许这样做?

我尝试了一些建议(也每次都设置弹出窗口的焦点),但没有一个有效。新(小)窗口被打开,但如果我点击外面的某个地方,它就消失了。我想要一个经典的“始终在顶部”功能,其中窗口停留在屏幕上。

Som*_*_SE 1

你不能这样做。如果网站可以这样做,那将是一个巨大的安全问题!诈骗网站可能会阻止访问者使窗口失去焦点。

想一想:

如果每次您收到新电子邮件时,您的电子邮件程序都会在您面前弹出一个弹出窗口,该怎么办?如果您不喜欢它,您将需要将其最小化或至少将其隐藏在其他窗口后面。问题是,如果您无法将其隐藏在另一个窗口后面怎么办?这破坏了用户体验。

相反,请尝试:

  • 标题栏闪烁(就像收到新环聊消息时的 Gmail 一样:标题栏从“Gmail - 收件箱”闪烁为“<名称> 说...”)。像这样:
    完成演示
    代码如下。完成后,请确保停止运行代码片段,方法是单击Hide Results以确保代码片段通过闪烁标题停止耗尽 RAM。

setInterval(function() {
  var title = document.getElementById('title');
  if (title.innerHTML === "Original Title") {
    title.innerHTML = "New Notification!";
  } else {
    title.innerHTML = "Original Title";
  }
},1000)
Run Code Online (Sandbox Code Playgroud)
<p id="title">Original Title</p>
<small>Because Stack Snippets don't have &lt;title> support, I used a p element there. In real development, replace &lt;p> with &lt;title>.</small>
Run Code Online (Sandbox Code Playgroud)

  • 在图标上添加一个红点,以便用户在浏览选项卡栏时可以看到一条通知。代码:

setInterval(function() {
  var flash = document.getElementById('flash');
  if (flash.src == "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAgklEQVQ4Ed2RSw6AMAhEOYhLT+7p3HiGGjRTp0OxJrpyQeiH9yhqtqzlVaSwWTGOrFEQAOoBfqfnzUGvIAAiqYInMGRc+42AjegyymCOF2AzgvgezF8EPhtm4jllvU1zQVx/D0U3AkCaz+8HgedEoiDvrT4FIpeIiAFdR4GKSMgwGu91q05tY4o1SAAAAABJRU5ErkJggg==") {
    document.getElementById('flash').src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAdklEQVQ4Ed2RQQ6AMAgE+f8zfJ2/qME4zbqV1MSePDQU2FlKGrHt7dMp4YgWeqpBgwHQE5A9r98KT4IBMJNu8AbGTLVrDNSRKbMIc76AZAZpH+YvBrkbO+me1V21a76RSepMzaNr+gsQpsBF2SvrgB4BiN6/8gPOhlAtW0V8NgAAAABJRU5ErkJggg==";
  } else {
    flash.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAgklEQVQ4Ed2RSw6AMAhEOYhLT+7p3HiGGjRTp0OxJrpyQeiH9yhqtqzlVaSwWTGOrFEQAOoBfqfnzUGvIAAiqYInMGRc+42AjegyymCOF2AzgvgezF8EPhtm4jllvU1zQVx/D0U3AkCaz+8HgedEoiDvrT4FIpeIiAFdR4GKSMgwGu91q05tY4o1SAAAAABJRU5ErkJggg==";
  }
},1000);
Run Code Online (Sandbox Code Playgroud)
<small>Once again, stack snippets does not support favicons. In real development, change img to link.</small>
<img rel="icon" type="image/png"  id="flash" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAgklEQVQ4Ed2RSw6AMAhEOYhLT+7p3HiGGjRTp0OxJrpyQeiH9yhqtqzlVaSwWTGOrFEQAOoBfqfnzUGvIAAiqYInMGRc+42AjegyymCOF2AzgvgezF8EPhtm4jllvU1zQVx/D0U3AkCaz+8HgedEoiDvrT4FIpeIiAFdR4GKSMgwGu91q05tY4o1SAAAAABJRU5ErkJggg==" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAgklEQVQ4Ed2RSw6AMAhEOYhLT+7p3HiGGjRTp0OxJrpyQeiH9yhqtqzlVaSwWTGOrFEQAOoBfqfnzUGvIAAiqYInMGRc+42AjegyymCOF2AzgvgezF8EPhtm4jllvU1zQVx/D0U3AkCaz+8HgedEoiDvrT4FIpeIiAFdR4GKSMgwGu91q05tY4o1SAAAAABJRU5ErkJggg==" />
Run Code Online (Sandbox Code Playgroud)

要避免什么:

  • 当新通知到达时播放巨大的声音
  • 尝试强制用户激活(幸运的是,大多数浏览器都会阻止此操作)
  • 最后,打开一个弹出窗口。

所以弹出窗口并不是一个好主意。