2013-10-28 5 views
1

В node-webkit вызов из iframe javascript в родительский javascript не работает для меня.
вызов родительской функции javascript из iframe

Я пытаюсь запустить ссылку в IFRAME в браузере по умолчанию в результате я хочу вызвать функцию в родительском окне так, чтобы позвонить:

gui.Shell.openExternal("link"); 

Любая помощь приветствуется , Заранее спасибо.

+0

Что URL вы пытаетесь открыть? – zaerymoghaddam

+0

Я пытаюсь открыть ссылку на другой сервер, работающий в другом месте. Этого было бы достаточно, если бы я мог открыть google.com в браузере по умолчанию. – magizh

ответ

3

Что вы хотите сделать, это перехватить ссылки во внутреннем фрейме.

Здесь у нас есть iframe, где все ссылки будут открываться в браузере по умолчанию, а не в контексте узла 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> 
+0

Спасибо, что работает :) – magizh

+0

Удовольствие - Узел Webkit - это такой мощный инструмент! – Ewald

+0

Это не работает, если вы загружаете внешний веб-сайт в iframe, не так ли? Вы получаете сообщение об ошибке: «SecurityError: заблокирован кадр с источником« http: // ... »от доступа к кадру с исходным кодом« http: // ... ». Протоколы, домены и порты должны соответствовать « – aaaaahaaaaa

Смежные вопросы