web-dev-qa-db-ja.com

電子操作/インターセプトWebViewリクエストとレスポンス

webview を使用してサードパーティのコンテンツを表示するElectronアプリを作成したいと思います。

このウェブビューからのすべてのリクエストとレスポンスをインターセプトできるようにしたいと思います。このコンテンツを操作したい場合もあれば、ログに記録したい場合もあれば、何もしたくない場合もあります。

応答の1つの例として、WebサーバーがTypeScriptコードで応答する場合があります。その応答を取得して、標準のJavaScriptにコンパイルしたい場合があります。

このページ を調べましたが、リクエストのキャンセルとヘッダーの操作しかできないようです。 WebRequest API は、要求と応答の非常にマイナーな操作しか許可しないため、私のユースケースのニーズに合うようには見えません。

また、プロキシとして機能するWebサーバーをセットアップすることも検討しましたが、心配です。ユーザーのプライバシーを維持したいのですが、サードパーティのコンテンツをホストするWebサーバーに対して、リクエストがサーバーではなく環境(例:Electron webview)のようなブラウザーから送信されているように見せたいです。送信するヘッダーなどを使用してリクエストを操作できることはわかっていますが、このソリューション全体がはるかに複雑になりつつあるので、私が望んでいますが、それが唯一の選択肢になるかもしれません。

これを達成するためのより良い方法はありますか?

10
Charlie Fish

Protocol API を確認する必要があると思います。内部でプロキシとして機能します。ユーザーがhttp://www.google.comを開いてyou've been conned!のようなコンテンツを表示したいとします。

const { protocol } = require("electron");

const content = new Buffer("you've been conned!");

protocol.interceptBufferProtocol("http", (request, result) => {
  if (request.url === "http://www.google.com")
    return result(content);
  ... // fetch other http protocol content and return to the electron
});

WebRequest API と比較すると、やらなければならないことがたくさんあります。ただし、独立したローカルプロキシよりもはるかに単純です。

6
notXX