如何从Visual Studio Code API中打开浏览器

18

我只是探索一种使用Visual Studio Code API开发扩展时打开默认浏览器的方法。

以下是我的代码:

var disposable = vscode.commands.registerCommand('extension.browser', () => {
  // The code you place here will be executed every time your command is executed
  vscode.Uri.call("http://facebook.com");
});
如何使用vscode类从API打开浏览器URL。
3个回答

42

不需要使用Node或外部库。

如果您正在使用VS Code 1.31+,请使用vscode.env.openExternal函数:

import * as vscode from 'vscode';

vscode.env.openExternal(vscode.Uri.parse('https://example.com'));

对于旧版本的VS Code,请使用vscode.open命令:

vscode.commands.executeCommand('vscode.open', vscode.Uri.parse('https://example.com'))

这两个都将在用户的默认浏览器中打开页面


1
当浏览器关闭时,是否可能获得回调?看起来不太可能。 - Michael Flanakin
@MichaelFlanakin 不是用 vscode.open。如果需要这样做,您需要编写一个使用node的child_process或类似工具的vscode扩展程序。 - Matt Bierner
@ShanKhan 不行。你需要编写一个 vscode 扩展来实现这个功能。可以查看 vscode.previewHtml 命令 来实现(例如,在 HTML 预览中使用 iframe 加载页面)。 - Matt Bierner
1
似乎 vscode.env.open 已经更名为 vscode.env.openExternal - yumetodo
有没有一种方法可以在默认的邮件客户端中打开电子邮件地址? - Bandara
尝试使用mailto URI:mailto:someone@example.com - Matt Bierner

2
您无需安装外部依赖项。只需使用Node.js库和系统命令即可轻松打开URL。例如,使用child_process.exec打开URL。

声明一个函数如下:

const exec = require('child_process').exec;

function openURL(url) {
  let opener;

  switch (process.platform) {
    case 'darwin':
      opener = 'open';
      break;
    case 'win32':
      opener = 'start';
      break;
    default:
      opener = 'xdg-open';
      break;
  }

  return exec(`${opener} "${url.replace(/"/g, '\\\"')}"`);
}

然后从您的代码中调用它

openURL('http://stackoverflow.com');

在Windows 10中,我必须在打开器后添加""(两个空引号)才能使其正常工作。当您遇到VSCode针对某些URL的双重编码错误时,这是一个不错的解决方案。 - boocs

0

我必须使用npm open url才能在浏览器中打开。

var openurl = require('openurl').open;
    openurl("http://google.com");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接