1

在 node-webkit 中,从 iframe javascript 调用到父 javascript 对我不起作用。

我试图在默认浏览器的 iframe 中启动一个链接,结果我想在父窗口中调用一个函数以便调用:

gui.Shell.openExternal("link");

任何帮助表示赞赏。提前致谢。

4

1 回答 1

3

您要做的是拦截内部框架中的链接。

这里我们有一个 iframe,所有链接都将在默认浏览器中打开,而不是在 Node WebKit 上下文中。我希望这有帮助。

试试这个:

<!DOCTYPE html>
<html>
 <head>

  <script type="text/javascript">
    window.gui = require('nw.gui');

    handleLinks = function(event)
    {
            var href;

            function checkLinks(element) 
            {
                if (element.nodeName.toLowerCase() === 'a') 
                {
                    href = element.getAttribute('href');
                    if (href)
                    {
                        gui.Shell.openExternal(href);
                        // important, prevent the default event from happening!
                        event.preventDefault();
                    }   
                }                   
                else if (element.parentElement) 
                {
                  checkLinks(element.parentElement);
                }
            }
            checkLinks(event.target);
    };

     function isLoaded() 
     {
       // let's see if the iframe has finished loading
       var iframe = document.getElementById('myframe');

       if (iframe && iframe.contentWindow && iframe.contentWindow.document &&
           iframe.contentWindow.document.body &&
           iframe.contentWindow.document.body.innerHTML) 
           {
            //now deal with links
            iframe.contentWindow.document.body.addEventListener('click', handleLinks, false);
           } 
           else 
           {
             // not yet, let's wait a bit and try again
             setTimeout(isLoaded, 300);
           }
     };
   </script>
 </head>
 <body>
   <iframe id="myframe" src="http://www.google.com" onLoad="isLoaded();" style="width: 100%;" seamless="true" nwdisable nwfaketop></iframe>
   <div>
    Links in the normal browser should still work in the Node Webkit environment.
   </div>
   <footer>
    <a href="http://www.yoursitehere.com">Whaddayaknow</a>
   </footer>
 </body>
</html>
于 2013-11-07T17:41:33.577 回答