【问题标题】:Chrome App: launch link in Chrome rather than SafariChrome 应用程序:在 Chrome 而不是 Safari 中启动链接
【发布时间】:2013-09-07 12:21:39
【问题描述】:

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

在 Mac OS X 上,这些在 Safari 中打开。反正有没有让它们在 Chrome 中打开?

【问题讨论】:

  • 是的。将您的默认浏览器设置为 Chrome。

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


【解决方案1】:

当您在打包的应用程序中单击带有 target="_blank" 的链接时,Chrome 会尊重您选择的默认浏览器并在外部打开该链接,无论它是什么,不一定是 Chrome。在您的情况下,默认系统浏览器必须是 Safari。

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

如果您不想这样做,但出于某种原因仍坚持要求您的链接在新标签页中打开,特别是在 Chrome 中,这是实现此目的的一种(也许是唯一的)方法:

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

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

    chrome.runtime.onMessageExternal.addListener( 功能(请求,发送者,发送响应){ // 不要忘记确认 |sender|你是这里的应用程序吗? chrome.tabs.create({ url: request.url }, function() { // 如果需要在标签页打开时通知应用: 发送响应(真); }); // 'true' 表示您的响应是异步发送的。 返回真; } );

【讨论】:

    猜你喜欢
    • 2015-05-21
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 2018-11-04
    • 2021-07-08
    相关资源
    最近更新 更多