我试图找到这个JavaScript方法调用的jQuery等价物:
document.addEventListener('click', select_element, true);
Run Code Online (Sandbox Code Playgroud)
我已经达到了:
$(document).click(select_element);
Run Code Online (Sandbox Code Playgroud)
但这并没有达到与JavaScript方法的最后一个参数相同的结果 - 一个布尔值,指示事件处理程序是否应该在捕获或冒泡阶段执行(根据我的理解来自http://www.quirksmode.org) /js/events_advanced.html) - 被遗漏了.
如何使用jQuery指定该参数或以其他方式实现相同的功能?
我正试图做一个简单的postMessage例子......
删除这些条件中的任何一个,并且工作正常:-)
但据我所知,postMessage当两个窗口共享一个原点时,窗口之间似乎只能在IE10中工作.(嗯,事实上 - 奇怪的是 - 行为稍微宽容一点:共享主机的两个不同的起源似乎也有效).
(注意:这个问题触及了问题,但它的答案是关于IE8和IE9 - 而不是10)
更多细节+例子......
<!DOCTYPE html>
<html>
<script>
window.addEventListener("message", function(e){
console.log("Received message: ", e);
}, false);
</script>
<button onclick="window.open('http://jsbin.com/ameguj/1');">
Open new window
</button>
</html>
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html>
<script>
window.opener.postMessage("Ahoy!", "*");
</script>
</html>
Run Code Online (Sandbox Code Playgroud)
这适用于:http://jsbin.com/ahuzir/1 - 因为两个页面都托管在同一个源(jsbin.com).但是将第二页移到其他地方,它在IE10中失败了.
html5 compatibility postmessage cross-browser internet-explorer-10
Internet Explorer 9中的Element对象是什么?
if (!Element.prototype.addEventListener) {
Element.prototype.addEventListener = function() { .. }
}
Run Code Online (Sandbox Code Playgroud)
它在Internet Explorer中如何工作?
如果有一个等于addEventListener和我不知道的功能,请解释.
任何帮助,将不胜感激.随意提出一种完全不同的方法来解决问题.
javascript internet-explorer addeventlistener internet-explorer-9
当消息出现时,似乎window11上的window.postMessage仍然被破坏
IE 8/9/10也存在类似的问题,但IE 11中的"部分支持"在IE 11中标记为"支持"
有一个代码的例子适用于chrome/ff但不适用于IE:
$(document).ready(function() {
$('#log').append('listening...');
window.addEventListener("message", function(e){
$('#log').append("Received message: " + JSON.stringify(e.data));
}, false);
$('button').click(function() {
window.open('http://jsbin.com/eQeSeros/1', 'popup','menubar=no, status=no, scrollbars=no, menubar=no, width=200, height=100');
});
});
Run Code Online (Sandbox Code Playgroud)
该子弹出(jsbin) :(如果没有被打开的jsfiddle将无法正常工作)
$(document).ready(function() {
$('body').append('sending...');
window.opener.postMessage("Hello?", "http://fiddle.jshell.net");
$('body').append('sent...');
});
Run Code Online (Sandbox Code Playgroud)
我从帖子中读到了IE10中的跨源postMessage?我们可以使用a MessageChannel代替postMessage,但是阅读doc,我在实际情况下没有找到如何使用它,因为你必须将端口传递给子窗口.
在我需要发送消息之前有一个重定向链,所以即使我可以发送一个端口,我将丢失最初/重定向之前发送的任何js对象.
有没有替换的想法?
更新14/01:我正在考虑在窗口/标签标题中传递我的数据并定期检查父标题中的这个标题......但这将是一个非常脏的技巧.
更新16/01:真正糟糕的部分是,即使消息是从同一个域发送,但在被另一个域重定向后,它确实会中断.
这是一个例子:http: //jsfiddle.net/L4YzG/13/打开弹出窗口http://jsbin.com/eQeSeros/4/edit重定向到http://jsfiddle.net/mxS8Q/2/(那个发布消息)
如果您通过最终URL重定向直接更改url popup到http://jsfiddle.net/mxS8Q/2/show这适用于IE,因为在开放和发布之间没有其他域
我还在处理我的窗口标题脏伎俩.当它在另一个域上时,我们无法接收窗口的标题,但如果它返回到jsfiddle,则标题可用(postMessage之前没有问题).这是一个例子:http://jsfiddle.net/L4YzG/14/ ...这可能是一个替代解决方案,但我刚看到一些关于在cookie中传递数据的事情,它只需要进行测试.
更新04/02:如果最终域相同但不在跨域中,则在标题中传递信息是不够的.我想注入一个相同域的iframe来传递这些信息,但我也不能共享子窗口对象(postMessage需要一个可序列化的对象). …
javascript internet-explorer postmessage cross-browser cross-domain