Electron: URLリンクがクリックされたときにWebビューでのナビゲーションを防ぐ方法

作成日 2016年01月22日  ·  3コメント  ·  ソース: electron/electron

やあ、
will-navigateイベント(https://github.com/atom/electron/blob/master/docs/api/web-view-tag.md)のドキュメントで次の文を調べました。

event.preventDefault()を呼び出しても効果はありません。

では、Webビューが他のページに移動しないようにするにはどうすればよいでしょうか。 ユーザーがwebviewのURLリンクをクリックすると、デフォルトのブラウザを起動するつもりです。
これがレンダラープロセスの私のコードです。

 webview.addEventListener('will-navigate', function(e) {
        e.preventDefault();
        require('electron').shell.openExternal(e.url);
 });

このコードでは、webviewのURLリンクをクリックすると、webviewが新しいページに移動し、デフォルトのブラウザも開いて新しいページが表示されます。 webviewで新しいページへの移動を停止したい。

最も参考になるコメント

これは、ユーザーがリンクをクリックしてナビゲーションを防止し、要求されたURLについてアプリに通知するために機能します。 プリロードの使用とこれの注入:

document.addEventListener('DOMContentLoaded', function () {
  document.addEventListener('click', function (e) {
    e.preventDefault();
    e.stopPropagation();
    setTimeout(function () {
      var path = e.target.href;
      ipcRenderer.sendToHost('element-clicked', path);
    }, 100);
    return false;
  }, true);
});

document.addEventListener('click', fn, true)の3番目のパラメータに注意してください

参照: https ://stackoverflow.com/questions/6157486/jquery-trap-all-click-events-before-they-happen/6157660#6157660

全てのコメント3件

#1378の複製。

解決策が投稿されていませんか?

これは、ユーザーがリンクをクリックしてナビゲーションを防止し、要求されたURLについてアプリに通知するために機能します。 プリロードの使用とこれの注入:

document.addEventListener('DOMContentLoaded', function () {
  document.addEventListener('click', function (e) {
    e.preventDefault();
    e.stopPropagation();
    setTimeout(function () {
      var path = e.target.href;
      ipcRenderer.sendToHost('element-clicked', path);
    }, 100);
    return false;
  }, true);
});

document.addEventListener('click', fn, true)の3番目のパラメータに注意してください

参照: https ://stackoverflow.com/questions/6157486/jquery-trap-all-click-events-before-they-happen/6157660#6157660

このページは役に立ちましたか?
0 / 5 - 0 評価