microsoft / vscode

Visual Studio Code
https://code.visualstudio.com
MIT License
164k stars 29.19k forks source link

In some places, allow to use URL in addition to URI #85930

Open jrieken opened 4 years ago

jrieken commented 4 years ago

This is followup work from https://github.com/microsoft/vscode/issues/83645 and in essence it's about allowing to use the URL-type when dealing with resources outside of VS Code. So far we have identified:

tjx666 commented 4 years ago

is there any progress? @jrieken

nblagoev commented 4 years ago

Hi @jrieken, any ETA on resolving this? I cannot find a way out of this encoding problem with vscode.env.openExternal

DanTup commented 4 years ago

I'm blocked on this now too - I need to open URLs that have fragments and they get encoded incorrectly.

@jrieken this isn't assigned to any milestone - do you think it's likely to happen in the near future? Would you accept a PR that just adds an overload that takes URL in openExternal?

We can work around it for non-remote workspaces by just launching the browser ourselves, but it'll still be broken in VS Codespaces and friends.

jrieken commented 4 years ago

It isn't a trivial change but feel free to give it a try, code pointer: https://github.com/microsoft/vscode/blob/e80c62bdcb0a1d7ce0d3d826241df0ef20162417/src/vs/workbench/api/common/extHostWindow.ts#L42

DanTup commented 4 years ago

It isn't a trivial change

Before I bite off more than I can chew, what makes you say that? I thought it might just be a case of accepting a URL all the way through (in the same way as it currently accepts a URI). Now I'm not so sure 😄

(though probably if it was so simple, it would've been done already! ..)

jrieken commented 4 years ago

For remote extension hosts, all uris go through some special handling so that an extension can talk about a (local) file-uri and so that the UI knows that it's a file-uri on the other machine. So, now the question is if URL objects should also go through that mechanism (which requires them to be uris) or not

DanTup commented 4 years ago

I see - it does sound like there's more to it than I thought.

I've managed to work around it for now (passing things on the querystring - which isn't affected as much by the encoding - instead of the fragment, and having the receiving app move them over) as I needed a fix for the next release.

chdsbd commented 3 years ago

As a hack, I was able to pass a string to vscode.env.openExternal(myUrl) instead of using vscode.env.openExternal(vscode.Uri.parse(myUrl)). I don't know how robust this is because I had to @ts-ignore the call, but it works for my use case and my url no longer gets double encoded.

akosyakov commented 3 years ago

Stumbled on the similar issue while trying to open external with query params for ouath2. ? in redirect URI gets double encoded. It would be nice if just string type can be allowed for external URIs 🙏

DavidGoldman commented 2 years ago

It seems like this could be supported by changing the API to note it supports a string - or maybe introduce another API to avoid this double-encoding issue?

eamodio commented 2 years ago

I got bit by this as well: https://github.com/gitkraken/vscode-gitlens/issues/2014

As @DavidGoldman notes, passing a string works and avoids this problem. @jrieken could the .d.ts be updated to allow a string?

DavidGoldman commented 2 years ago

Friendly ping for the above comment @jrieken, can we just update the .d.ts file here?

tjx666 commented 1 year ago

@jrieken My issue https://github.com/microsoft/vscode/issues/88273 is marked as duplicated with this issue, but I think it may not same with this.

I test following solution, but not work for my situation on windows.

As a hack, I was able to pass a string to vscode.env.openExternal(myUrl) instead of using vscode.env.openExternal(vscode.Uri.parse(myUrl)). I don't know how robust this is because I had to @ts-ignore the call, but it works for my use case and my url no longer gets double encoded.

brpaz commented 1 year ago

Hello. Any chance this can be fixed? an extension that I am building relies on openExternal to open files with an external protocol, and it´s encoding the "=" in the query string, breaking the url handler.

@akosyakov hack worked for me, in the meanwhile.

max-samusevich commented 1 year ago

Hello. Any chance this can be fixed? an extension that I am building relies on openExternal to open files with an external protocol, and it´s encoding the "=" in the query string, breaking the url handler.

@akosyakov hack worked for me, in the meanwhile.

Same for me. I'm trying to open an external app with a link in an .md file: [test link](obsidian://open?vault=Obsidian%20Sandbox&file=Adventurer%2FNo%20prior%20experience), but I get an error alert if I click the link in the file itself and get no response in a default md preview, same with a preview from the Markdown preview enhanced extension.

VS Code encodes "=" signs

A also tried to add the "obsidian://" protocol to accepted protocols for links that are processed by the Markdown preview enhanced extension but still nothing happens in the preview mode of this extension.