调用窗口对象上的 javascript 函数会替换该窗口的内容吗? (有时??)

标签 javascript function window return-value

出于此处不应列举的原因,我发现将函数附加到窗口对象可能很有用。但是,我发现了相当奇怪的行为。

<html><head><script>
function sideEffect() { console.log("Side effect happened. Wewt."); }
window.foo = function() {
    sideEffect();
    return true;
}
window.bar = function() {
    sideEffect();
}
</script></head>
<body>
<a href="javascript:window.foo();">Replaces entire window with "true"</a>
<br />
<a href="javascript:window.bar();">Doesn't</a>
</body></html>

为什么调用具有返回值的函数会决定替换窗口的内容?这在 Firefox 和 Opera 中会发生,但在 IE9、Chrome 或 Safari 中不会发生(均在 Win7 上测试过)。

所以问题是:是否有某种文档说明了这种行为? 或者这是 FF/Opera 中的(已知)错误?


[edit] 有趣的是(根据迄今为止的答案和评论),滥用 window 对象似乎是一个转移注意力的问题。

最佳答案

您的代码运行良好——浏览器完全按照您的指示执行。

JavaScript 行在网络浏览器的 URL 栏中有效,浏览器将立即执行它们。 (试试看:在 URL 栏中写一个警告框,按回车键,看看会发生什么。)通过将 JavaScript 写入 anchor 标记的 href,您可以设置浏览器的位置 (换句话说,就是那行 JavaScript 的 URL)。因为您的一个函数返回一个值,所以文档被该值覆盖;这是正常的浏览器行为。

关于调用窗口对象上的 javascript 函数会替换该窗口的内容吗? (有时??),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5628257/

相关文章:

javascript - 在 Web 浏览器中使用 JavaScript 运行批处理文件

javascript - 使用indexOf缩短if语句

python-3.x - Python 3 文件共享变量

java - 如何使用 swing 添加图像以及如何使其大小适合我的窗口?

swift - NSStatusBar 中的 NSStatusItem,操作选择器方法没有响应

javascript - 如何修复剪刀石头布蜥蜴 spock 程序的输出表?

javascript - 使用 Knockout 动态创建菜单结构

mysql - SQL : How to use SELECT results as function input parameters

swift - 如何在 Swift 中从子类内的函数获得多个返回值

javascript - IP 名称和路径显示在窗口上