Node Webkit - 从iframe到应用程序的Fire事件

时间:2015-03-05 09:19:21

标签: javascript events iframe browser node-webkit

我正在尝试使用nodewebkit制作迷你信息亭浏览器(全屏,最小选项等)。 自助服务终端浏览器的结构如下:

<!DOCTYPE html>
<head>
    ...
</head>
<body>
    <!-- placeholder until iframe is loaded -->
    <div class="placeholder">
        <div class="loading">Loading</div>
    </div>
    <iframe id="iframe" src="" nwfaketop nwdisable></iframe>

    <script type="text/javascript">
        // Basic features of the kiosk browser
        document.onkeydown = function(evt) {
            //Toggle FullScreen on F1 or F11
            if (evt.keyCode == 112 || evt.keyCode == 122) {
                win.toggleKioskMode();
            }
            ...
        }
        ...
        loadIframe();
        ...
    </script>
</body>

问题是,一旦加载并显示iframe(100%宽度和高度),就会在此iframe中触发事件,而不是在我的应用中。

我使用documentation尝试了几件事,但我并不真正理解如何让事情按照我想要的方式运作。

所以任何帮助都会很棒!感谢。

3 个答案:

答案 0 :(得分:1)

iframe加载后,您可以在iframe的内容窗口中注册事件处理程序。

var iframe = document.getElementById("iframe");
iframe.onload = function(){
   iframe.contentWindow.addEventListener('keydown',yourHandler);
}

答案 1 :(得分:0)

如果您想在iframe和窗口之间启用某些通信,则可以使用prothole。请注意,您可能还需要访问为iframe提供服务的其他域。希望它有所帮助。

答案 2 :(得分:0)

我终于通过使用document-end监听器找到了一种方法,当窗口或子iframe被加载时(在onload事件之前),它会被触发。

win.on('document-end', function(frame) {
    if(frame != null){ // If frame is not the window but an Iframe
        frame.contentDocument.body.addEventListener('keydown', yourScript);
    }
});

也许不是正确的方法,但它有效。