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