我写了一些代码来为页面添加一个按钮:
var myButt = document.createElement('button');
myButt.onclick = window.location.reload;
myButt.innerText = 'Reload';
document.body.appendChild(myButt);
但它引发了一个错误:
TypeError:输入错误
将其包装在函数中可以解决问题:
myButt.onclick = function(){ window.location.reload(); };
但我的问题是为什么前者不起作用?
执行air.trace(typeof(window.location.reload));
输出function
。
An answer表明它应该是可能的。它肯定更简洁。
我正在运行Adobe AIR 3.6(运行Webkit),如果这有所不同。
答案 0 :(得分:2)
使用它时this
值不正确。
当您需要this
myButt
时,window.location
原来是this
。
要修复此(hehe),请按照您的方式将其换行,或者将新的myButt.onclick = window.location.reload.bind(window.location);
值绑定到它:
Function.prototype.bind
我刚测试过,它适用于Firefox 23.0.1。
为了将来参考,他使用了fNOP.prototype = this.prototype || {};
找到的window.location.reload
兼容性代码。
使用上面的代码,他收到了错误
TypeError:在具有无效原型的对象上调用instanceof 属性
要解决此问题,我将该兼容性代码的第18行更改为以下内容:
{{1}}
这样原型被设置为空白对象,因为{{1}}自然没有原型。