相关疑难解决方法(0)

jQuery相当于JavaScript的addEventListener方法

我试图找到这个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指定该参数或以其他方式实现相同的功能?

javascript jquery events event-handling javascript-events

181
推荐指数
6
解决办法
40万
查看次数

IE10中的跨源postMessage是否被破坏?

我正试图做一个简单的postMessage例子......

  • 在IE10中
  • 在窗口/标签之间(与iframe)
  • 跨越起源

删除这些条件中的任何一个,并且工作正常:-)

但据我所知,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

90
推荐指数
3
解决办法
6万
查看次数

Internet Explorer中的addEventListener

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

64
推荐指数
3
解决办法
10万
查看次数

在IE11上,postMessage仍然被打破?

当消息出现时,似乎window11上的window.postMessage仍然被破坏

  • 在window.open窗口和子弹出/选项卡之间
  • 当它从不同的域发送[或在某些情况下相同的域,cf update 16/01]

IE 8/9/10也存在类似的问题,但IE 11中的"部分支持"在IE 11中标记为"支持"

有一个代码的例子适用于chrome/ff但不适用于IE:

揭幕战(的jsfiddle) :

$(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

26
推荐指数
3
解决办法
3万
查看次数