Chrome应用:在Chrome中启动链接而非Safari

时间:2013-09-07 12:21:40

标签: macos google-chrome safari google-chrome-app

我正在开发一个Chrome(打包)应用程序,它维护一组书签。这在它自己的小窗口中打开。单击书签会在浏览器中使用目标设置为“_blank”的链接打开它。

在Mac OS X上,这些在Safari中打开。无论如何在Chrome中打开它们?

1 个答案:

答案 0 :(得分:0)

当您在打包的应用中点击目标=“_空白”的链接时,Chrome会尊重您选择的默认浏览器,并在外部打开链接,不一定是Chrome。在您的情况下,默认系统浏览器必须是Safari。

在Chrome中打开此类链接的简便方法是将其设置为默认浏览器。

如果您不想这样做,但仍然出于某种原因坚持在Chrome中专门用新标签打开您的链接,这里有一种(也许是唯一的)实现方式:

  1. 为您的应用编写随播扩展程序,让您的用户安装它。
  2. 在应用程序中,为每个链接附加一个onclick处理程序,并使用chrome.runtime.sendMessage()向扩展程序发送请求以打开链接的URL(为此,您必须找出您的扩展程序的ID并将其烘焙到其清单中,如下所述:http://developer.chrome.com/apps/manifest/key.html):

    var link = ...;
    link.addEventListener('click', function(e) {
      e.stopPropagation();
      e.preventDefault();
      chrome.runtime.sendMessage(
        yourExtensionId, { url: link.href }, function(response) {}
      );
    };
    
  3. 在扩展程序中,定义chrome.runtime.onMessageExternal(数据)处理程序(它将拦截来自应用程序的sendMessage()请求),并在那里使用chrome.tabs.create()打开一个新选项卡:

    chrome.runtime.onMessageExternal.addListener(
      function(request, sender, sendResponse) {
        // Don't forget to make sure that |sender| is you app here.
        chrome.tabs.create({ url: request.url }, function() {
          // If you need to notify the app when the tab opens:
          sendResponse(true);
        });
        // 'true' means that your response is sent asynchronously.
        return true;
      }
    );