6

Electron の<webview> ドキュメントには、オブジェクトで使用できるメソッドのリストがあります。メソッドのいずれかを実行しようとすると、どれも機能しません。インスペクターで要素のプロパティを調べる<webview>と、そのプロトタイプはwebview. ( __proto__ : webview)

すべてのメソッドが保存されているのは、そのプロトタイプです。したがって、これらのメソッドを使用する場合、基本的に要素はプロトタイプからこれらのメソッドを継承する必要があります (例: myWebview.openDevTools())。

でも!Object.getProptotypeOf(myWebview)私が使用するとHTMLElementwebviewインスペクターに表示されるのとは異なります。

これが私のコードの例です:

<webview id="myWebview" src="path/to.file"></webview>

<script> 
  var myWebview = document.getElementById('myWebview');
  console.log("myWebview: ",myWebview);
  console.log("prototype: ",Object.getPrototypeOf(myWebview)); //=> HTMLElement
  myWebview.openDevTools();
</script>
4

2 に答える 2

9

問題を発見し、 Electron Documentationに例を追加しました

肝心なのは、webview 要素の準備ができたときにリッスンする webview にリスナーを追加する必要があるということです。

webview.addEventListener("dom-ready", function(){
  webview.openDevTools();
});

@Shwany によると、イベントが発生すると webview のメソッドが使用可能になりますがdid-start-loading、webview 要素の準備が完全に整うまで待機することをお勧めします。dom-ready


より詳細な説明については、次のとおりです。

ウィンドウが最初に DOM をレンダリングするとき、webview メソッドは使用できません。最初は、<webview>要素のプロトタイプはまだジェネリックHTMLElementです。

ページがレンダリングされた後、<webview>要素の読み込みが開始され、そのプロトタイプが webview プロトタイプ (要素と同じ名前) に変更されます。そして、webview プロトタイプにアクセスできるようになると、すべての webview プロトタイプ メソッドにアクセスできるようになります。

于 2015-06-14T00:40:38.630 に答える
2

webview のドキュメントには次のように書かれています。

何らかの方法でゲスト コンテンツを制御したい場合は、webview イベントをリッスンし、webview メソッドを使用してそれらのイベントに応答する JavaScript を記述できます。

この手がかりを利用して、次のコードを使用して webview で openDevTools を呼び出すことができました。

  <script> 
  var myWebview = document.getElementById('myWebview');
  myWebview.addEventListener("did-start-loading", function (e) {
    myWebview.openDevTools();      
  });
  </script>  

メソッドがすぐに webview に適用されていないと推測しています。document.readystate == "complete" でアクセスしようとしましたが、まだ利用できませんでした。上記のイベントにバインドすることで、必要な機能が得られることを願っています。

于 2015-06-13T14:11:35.777 に答える