TMS*_*TMS 6 javascript firefox window
在回答我的问题Pumbaa80发现调用之间的差异open()
,并window.open()
尝试下面的例子在Firefox(上11.0测试):
http://jsfiddle.net/9kqp5/(调用open
; 在FF中的新选项卡中打开,前提是"在新选项卡中打开新窗口"设置已打开,默认情况下是这样)
http://jsfiddle.net/HLbLu/(电话window.open
; 在新的小窗口打开)
但为什么到底有区别呢?如果我尝试以下示例:
<script>
var a = 2;
function hello() { alert(this.a); }
hello();
window.hello();
</script>
Run Code Online (Sandbox Code Playgroud)
调用函数的两种变体hello
完全相同,包括具有相同的this
!!!
你的一个小提琴是window.open
在另一个调用时调用document.open
,因为内联属性事件处理程序中的作用域链很奇怪.所以你最终访问http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#dom-document-open
也就是说,因为你传递了3个参数,所以这应该是调用的window.open
.行为上的差异似乎是Firefox中的一个错误.我提交了https://bugzilla.mozilla.org/show_bug.cgi?id=741266.
在事件处理程序内部,open
它本身将解析为document.open
.正如Boris Zbarsky在评论和他的回答中所提到的,这是HTML5指定的预期行为.在有关事件处理程序的部分中,步骤6指定:
6.使用上面创建的脚本执行环境,创建一个函数对象(如ECMAScript第5版第13.2节"创建函数对象"中所定义),具有:
(...)
词汇环境范围
- 让Scope成为NewObjectEnvironment(元素的Document,全局环境)的结果.
- 如果元素具有表单所有者,则让Scope为NewObjectEnvironment(元素的表单所有者,Scope)的结果.
- 让Scope成为NewObjectEnvironment(元素的对象,Scope)的结果.
(......)
换句话说,事件处理程序中的变量引用将按顺序解析:
document
性能 归档时间: |
|
查看次数: |
3209 次 |
最近记录: |