2016-04-05 6 views
1

私の電子アプリでは、サイドバー(リンクを含む)とメインページがあり、その後ほとんどのページを占めています。私は別々の.htmlファイルにいくつかのページを持っていますが、これはプログラムでwebviewにロードできるようにしたいと考えています。 iFrameで、それはその後のようなものとしての私のリンクを持つ(「content_frame」と言う)のiframeのname属性を設定するのと同じくらい簡単です:電子でWebviewの内容をプログラム的に変更する

<a id="page1_link" href="pages/page1.html" target="content_frame">page 1</a> 

そして、これは私のWebViewです:

<webview nodeintegration="on" src="pages/landing_page.html" name="content_frame" height="100%" width="100%"></webview> 

最初ページ(landing_page.html)はうまく表示されますが、同じ方法でウェブビューを使用しようとすると、この埋め込みウェブビューではなくポップアップウィンドウでページが開きます。私はこれまでiframeを使ってきましたが、電子からノードのものを使う必要があります(iframeからの要求はすべてを破る必要があります)。

答えて

1

アンカータグのtarget属性を使用してこれを行うためのクリーンな方法がないように見えます。 JavaScriptを使用すると、アンカーのクリックイベントを取得し、webviewでloadURLを使用してページを変更できます。そこにこれを行うのは間違いなくよりエレガントな方法がありますが、これは動作します:http://electron.atom.io/docs/v0.37.4/api/web-view-tag/#webviewloadurlurl-options

ロード内のURL

var webview = document.getElementsByName('content_frame')[0]; 
var bound = false; 
webview.addEventListener("dom-ready", function() { 
    if (bound) return; 
    bound = true;    
    var anchors = document.getElementsByTagName("a"); 
    for (var a = 0; a < anchors.length; a++) { 
     var anchor = anchors[a]; 
     if (anchor.getAttribute('target') == 'content_frame') { 
      anchor.addEventListener('click', function (e) { 
       e.preventDefault(); 
       webview.loadURL(e.srcElement.href);     
      }); 
     } 
    }         
}); 

あなたが、しかし、ここではマニュアルに従ってプロトコルを提供する必要がありますwebview、urlにはプロトコルプレフィックスが含まれていなければなりません。 http://またはfile://です。

+0

返信ありがとうございます。関数呼び出しを使用してsrc値を手動で変更するだけでしたが、私はあなたの応答を保持して、Webviewsに問題が発生したので、 iframeにちょっと戻ってください。私はiframeの中からrequire()を使用することについての新しい質問を開こうとしています。 – AlexJHayward

関連する問題