javascript - 在应用程序模式下运行的 Chrome 浏览器中使用 <BODY onUnload> 标签

标签 javascript perl google-chrome

我正在使用命令(来自批处理文件)启动 Chrome 浏览器窗口

c:\path\to\chrome.exe --application http://w.x.y.z/message 这是 http://w.x.y.z/message 的代码

<html>
<head>
<title>My Message Window</title>
</head>
<body onunload=window.open("http://w.x.y.z/cgi-bin/test.pl"), _blank>
<a href=http://w.x.y.z/cgi-bin/test.pl>My Long Test Meesage, Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit</a>
</body>
</html>

我的test.pl如下:

#!/usr/bin/perl
open(OUTFILE, ">>/message/log/accesslog.txt");
print OUTFILE scalar localtime ();

此网址显示一条消息。我的愿望是,当用户单击文本或故意关闭窗口时,我希望此操作调用 cgi-bin perl 脚本,并且此脚本将当前日期和时间写入(附加)到预定义文件中。

对于单击 URL,可以轻松地将整个消息设为链接并将其与我的 Perl 脚本的 URL 绑定(bind)。

对于窗口关闭的情况,我希望 onUnload 函数生效并调用一个新的(甚至相同的)窗口并在其中运行我的 perl 脚本。

我已经在纯 Chrome 浏览器中测试了 onUnlad 函数,它可以工作。但是从作为应用程序框架启动的 Chrome 加载的相同 URL,它被完全忽略。

为什么会这样,有谁知道如何使其工作,而无需将浏览器作为常规 Chrome 窗口启动,而不是使用 --application 开关。

最佳答案

这是问题(来自the Mozilla documentation):

Browsers equipped with pop-up window blockers will ignore all window.open() method calls in onunload event handler functions.

因此,您想要做的事情对于 window.open() 来说是不可能的。

尝试使用 AJAX。因为您只是尝试写入文件,所以您只需要传递信息,而不是打开新窗口。 AJAX 就可以很好地做到这一点。

关于javascript - 在应用程序模式下运行的 Chrome 浏览器中使用 <BODY onUnload> 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21633762/

相关文章:

javascript - 在 CSS 之前执行 JS

javascript - 图像更新的 Bokeh 回调

html - 交叉浏览 : OpenSans Chrome VS Safari

perl - 如何访问选项子中的 Getopt::Long 选项值?

javascript - Chrome 和 jquery css 无法正常工作

html - 在 Chrome 和 Safari 中打印时字体大小不同

javascript - 如何在 HTML5 中使用动态 x、y 值生成 Canvas 移动波浪?

javascript - Node.js 中的函数导出在 VSCode 中显示为属性

perl - HTTP::请求在 header 中用连字符替换下划线

php - 用 Perl 重新格式化 PHP 代码