diff options
| author | Stephen Blott | 2015-05-05 06:38:31 +0100 |
|---|---|---|
| committer | Stephen Blott | 2015-05-05 09:19:28 +0100 |
| commit | 1a1b8ec05aaca867261a3556317697d8cdaf7b6c (patch) | |
| tree | 866ab2a9a3d5e5c31d696901feca1fffd92d81d1 /lib/utils.coffee | |
| parent | c063619f87d140fe0abf82da73f10d1d019fd24c (diff) | |
| download | vimium-1a1b8ec05aaca867261a3556317697d8cdaf7b6c.tar.bz2 | |
Fix javascript: URIs.
This is @mrmr9393's suggestion from #1636. It mimic's Chrome's behaviour
when a javascript: URI is enetered into the omnibox (or clicked).
Fixes #1611.
Diffstat (limited to 'lib/utils.coffee')
| -rw-r--r-- | lib/utils.coffee | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/utils.coffee b/lib/utils.coffee index fba03b61..db63d53a 100644 --- a/lib/utils.coffee +++ b/lib/utils.coffee @@ -39,6 +39,17 @@ Utils = urlPrefix = new RegExp "^[a-z]{3,}://." (url) -> urlPrefix.test url + # Decode valid escape sequences in a Javascript URI. This is intended to mimic the best-effort decoding + # Chrome itself seems to apply when a Javascript URI is enetered into the omnibox (or clicked). + # See https://code.google.com/p/chromium/issues/detail?id=483000, #1611 and #1636. + decodeJavascriptURI: (uri) -> + uri.split(/(?=%)/).map((uriComponent) -> + try + decodeURIComponent uriComponent + catch + uriComponent + ).join "" + # Completes a partial URL (without scheme) createFullUrl: (partialUrl) -> if @hasFullUrlPrefix(partialUrl) then partialUrl else ("http://" + partialUrl) @@ -111,10 +122,7 @@ Utils = if Utils.hasChromePrefix string string else if Utils.hasJavascriptPrefix string - # We blindly URL decode javascript: URLs. That's what Chrome does when they're clicked, or entered into - # the omnibox. However, Chrome does not URL decode such URLs in chrome.tabs.update. - # This is arguably a Chrome bug. See https://code.google.com/p/chromium/issues/detail?id=483000. - decodeURI string + Utils.decodeJavascriptURI string else if Utils.isUrl string Utils.createFullUrl string else |
