Firefox-Javascript-window.event无法存活传递到context.apply()

Firefox - Javascript - window.event not surviving pass to context.apply()

本文关键字:context apply event Firefox-Javascript-window      更新时间:2023-12-05

-这是留给后代的原始问题-

我写的一段新代码有点麻烦。我正试图找到发送消息的窗口所在的iframe,假设它来自iframe。相关代码:

var getContainingFrame = function(source){
    var frames = document.getElementsByTagName('iframe');
    for (var i = 0; i < frames.length; ++i) {
        if (frames[i].contentWindow === source) {
            return frames[i];
        }
    }
    return false;
}
var postMessageReceivedCallback = function(event){
    getContainingFrame(event.source);
}
window.addEventListener("message", postMessageReceivedCallback, false);

在Chrome/Safari中运行良好,但Firefox每次都匹配第一个frame。(iframe.contentWindow === window,而不管哪个window)。事实上,我最初在这里的另一篇文章中找到了如何做到这一点,尽管他们没有提到Firefox的问题。

每个iframe都有不同的src。

有不同的匹配方法吗?我做错了什么吗?

请不要jQuery

感谢

更好的问题:

我的事件是通过窗口对象通过function.apply(window, params)传递的,期望它所应用的函数中有window.event可用-这在Chrome/Safari中有效,但在FF中却不是这样。我如何在FF中传递事件?

var someFunction = function(params){
    this.event.source //expect this to be the window the event originated in
    //... do something, like the iframe check
}
var postMessageReceivedCallback = function(event){
    //FF not keeping the event reference on the window that other browsers are,
    //so we add it ourselves from the event object passed by the message event.
    window.event = event;
    someFunction.apply(window, event.message);
}
window.addEventListener("message", postMessageReceivedCallback, false);