问题 Javascript当我们在Chrome中选择Stay on Page时,如何调用函数


请在Chrome浏览器中查看我的代码,如果点击刷新,系统会提示您选择2个选项。

  1. 离开这个页面和
  2. 保持此页上

当我点击 2.留在这个页面上 按钮它必须激活我的自定义功能 displayMsg()

任何人都能为我提供解决方案吗

<script type="text/javascript">
function displayMsg() {
    alert('my text..');
}
</script>
<script type="text/javascript">
window.onbeforeunload = function(evt) {
  var message = 'Please Stay on this page and we will show you a secret text.';
  if (typeof evt == 'undefined') {
      evt = window.event;
  }       
  if (evt) {
      evt.returnValue = message;
      return message;
  }
  trace(evt);
} 
</script>

9230
2018-05-16 10:13


起源



答案:


使用计时器来监听变量变量:

var vals=0;
function displayMsg() {
    alert('my text..');
}
window.onbeforeunload = function evens(evt) {
var message = 'Please Stay on this page and we will show you a secret text.';
  if (typeof evt == 'undefined') {
      evt = window.event;
  }       
    timedCount();
    vals++;
  if (evt) {
      evt.returnValue = message ;
      return message ;
  }
  trace(evt);
} 

function timedCount()
{
t=setTimeout("timedCount()",100);
if(vals>0)
{
    displayMsg();
    clearTimeout(t);
}
}

6
2018-05-16 12:43



也看看这个 听换可变的变化,在JavaScript的 - 或 - jQuery的 - Mohamad Rostami
优秀的剧本!非常感谢您花时间甚至包括我的displayMsg()函数,并且无需进一步修改即可直接使用:) - Me 4U
谢谢'Perdickss',您的代码甚至可以在IE浏览器上运行! - Me 4U


答案:


使用计时器来监听变量变量:

var vals=0;
function displayMsg() {
    alert('my text..');
}
window.onbeforeunload = function evens(evt) {
var message = 'Please Stay on this page and we will show you a secret text.';
  if (typeof evt == 'undefined') {
      evt = window.event;
  }       
    timedCount();
    vals++;
  if (evt) {
      evt.returnValue = message ;
      return message ;
  }
  trace(evt);
} 

function timedCount()
{
t=setTimeout("timedCount()",100);
if(vals>0)
{
    displayMsg();
    clearTimeout(t);
}
}

6
2018-05-16 12:43



也看看这个 听换可变的变化,在JavaScript的 - 或 - jQuery的 - Mohamad Rostami
优秀的剧本!非常感谢您花时间甚至包括我的displayMsg()函数,并且无需进一步修改即可直接使用:) - Me 4U
谢谢'Perdickss',您的代码甚至可以在IE浏览器上运行! - Me 4U


你可以结合使用 onbeforeunload 和 onunload 事件,在前者中设置计时器并在后者中清除它:

var showMsgTimer;

window.onbeforeunload = function(evt) {
    var message = 'Please Stay on this page and we will show you a secret text.';
    showMsgTimer = window.setTimeout(showMessage, 500);

    evt = evt || window.evt;
    evt.returnValue = message;

    return message;
}

window.onunload = function () {
    clearTimeout(showMsgTimer);
}

function showMessage() {
    alert("You've been trolled!");
}

这是因为 onunload 当用户选择留在页面上时,事件永远不会触发。


4
2018-05-16 10:56



op想要“当我点击2.停留在这个页面上按钮它必须激活我的自定义功能displayMsg()”,而不是离开页面 - Ravi Gadag
@Ravi:如果你阅读代码或测试它,你会发现它正是它的作用。如果您选择留在页面上,则会显示一条消息。如果你离开,它不会。 - Andy E
我同意,但是当你点击离开页面时它也会调用。在这里查看 jsfiddle.net/VuPcf - Ravi Gadag
@Ravi:计时器只需稍微调整一下。 100ms在本地测试中为我工作,但在你的jsFiddle示例中没有。将其更改为更高的值,例如500毫秒,解决了问题。可能需要进一步调整,但解决方案几乎是最佳选择。 - Andy E
优秀!这正是我想要的。谢谢安迪! :) - Me 4U


请使用这些代码行,它可以正常工作。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
    </script>
    <script type="text/javascript">
    $(function(){
    $(window).bind('beforeunload', function(){
      return 'Your Data will be lost :(';
     });
    });
    </script>

1
2017-07-07 06:55