0

一連のブックマークを保持する Chrome (パッケージ化) アプリを開発しています。これは、独自の小さなウィンドウで開きます。ブックマークをクリックすると、ターゲットが「_blank」に設定されたリンクを使用してブラウザで開きます。

Mac OS X では、これらは Safari で開きます。とにかくChromeで開くことはできますか?

4

1 に答える 1

0

パッケージ化されたアプリで target="_blank" を含むリンクをクリックすると、Chrome はデフォルト ブラウザーの選択を尊重し、必ずしも Chrome ではなく、それが何であれ外部でリンクを開きます。あなたの場合、デフォルトのシステム ブラウザは Safari でなければなりません。

Chrome でそのようなリンクを開く簡単な方法は、Chrome を既定のブラウザーにすることです。

それをしたくないが、何らかの理由で特に Chrome の新しいタブでリンクを開くことを主張する場合は、これを実現する 1 つの (おそらく唯一の) 方法があります。

  1. コンパニオン拡張機能をアプリに記述し、ユーザーにインストールしてもらいます。
  2. アプリでは、onclick ハンドラーをすべてのリンクにアタッチし、chrome.runtime.sendMessage() を使用してリクエストを拡張機能に送信し、リンクの URL を開きます (これを行うには、拡張機能の ID を見つけて、ここで説明されているように、マニフェストに焼き付けます: http://developer.chrome.com/apps/manifest/key.html ):

    変数リンク = ...;
    link.addEventListener('クリック', function(e) {
      e.stopPropagation();
      e.preventDefault();
      chrome.runtime.sendMessage(
        yourExtensionId, { url: link.href }, function(response) {}
      );
    };
    
  3. 拡張機能で、chrome.runtime.onMessageExternal(data) ハンドラーを定義し (アプリからの sendMessage() リクエストをインターセプトします)、そこで chrome.tabs.create() を使用して新しいタブを開きます。

    chrome.runtime.onMessageExternal.addListener(
      関数 (リクエスト、送信者、sendResponse) {
        // |sender| であることを確認することを忘れないでください。ここにアプリがありますか。
        chrome.tabs.create({ url: request.url }, function() {
          // タブが開いたときにアプリに通知する必要がある場合:
          sendResponse(真);
        });
        // 'true' は、応答が非同期で送信されることを意味します。
        true を返します。
      }
    );
    
于 2013-09-11T05:18:35.097 に答える