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

Node Webkit - Fire Event from iframe to the app

我正在尝试使用 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 尝试了几种方法,但我并不真正理解如何让事情按照我想要的方式工作。

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

如果你想在 iframe 和你之间启用一些通信 window 那么你可以使用 prothole 。请注意,您可能需要访问为 iframe too.Hope 提供帮助的其他域。

我终于找到了一种使用 document-end 侦听器的方法,该侦听器在 window 或加载子 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);
    }
});

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

您可以在 iframe 加载后立即在 iframe 的内容 window 中注册您的事件处理程序。

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