From af673648d47cb2770aeeb34a92e5c95cde31d316 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Thu, 27 Dec 2018 07:27:51 +0000 Subject: [PATCH 1/3] Execute "javascript:" URLs by injecting them into the page itself. Since `chrome.tabs.update()` no longer supports `javascript:` URLs, here we inject them into the page itself. Replaces #3167. Replaces #3209. Fixes #3178. --- background_scripts/main.coffee | 6 +++++- content_scripts/vimium_frontend.coffee | 1 + lib/dom_utils.coffee | 7 +++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/background_scripts/main.coffee b/background_scripts/main.coffee index 1aef5f334..addcc2cd1 100644 --- a/background_scripts/main.coffee +++ b/background_scripts/main.coffee @@ -97,7 +97,11 @@ do -> TabOperations = # Opens the url in the current tab. openUrlInCurrentTab: (request) -> - chrome.tabs.update request.tabId, url: Utils.convertToUrl request.url + if Utils.hasJavascriptPrefix request.url + {tabId, frameId} = request + chrome.tabs.sendMessage tabId, {frameId, name: "executeScript", script: request.url} + else + chrome.tabs.update request.tabId, url: Utils.convertToUrl request.url # Opens request.url in new tab and switches to it. openUrlInNewTab: (request, callback = (->)) -> diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index a3444d8a8..effb7ea17 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -132,6 +132,7 @@ initializePreDomReady = -> NormalModeCommands[registryEntry.command] sourceFrameId, registryEntry if DomUtils.isTopFrame() linkHintsMessage: (request) -> HintCoordinator[request.messageType] request showMessage: (request) -> HUD.showForDuration request.message, 2000 + executeScript: (request) -> DomUtils.injectUserScript request.script chrome.runtime.onMessage.addListener (request, sender, sendResponse) -> request.isTrusted = true diff --git a/lib/dom_utils.coffee b/lib/dom_utils.coffee index c8f2e5534..39c3848d0 100644 --- a/lib/dom_utils.coffee +++ b/lib/dom_utils.coffee @@ -433,6 +433,13 @@ DomUtils = style.textContent = Settings.get "userDefinedLinkHintCss" document.head.appendChild style + # Inject user Javascript. + injectUserScript: (text) -> + text = text[11..] if text[...11] == "javascript:" + script = document.createElement "script" + script.textContent = text + document.head.appendChild script + root = exports ? (window.root ?= {}) root.DomUtils = DomUtils extend window, root unless exports? From 7288b6bf7af79f89ab4e9559ea1d49c10dc9835a Mon Sep 17 00:00:00 2001 From: gdh1995 Date: Mon, 25 Nov 2019 11:01:55 +0800 Subject: [PATCH 2/3] injectUserScript: try to decode URI --- lib/dom_utils.coffee | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/dom_utils.coffee b/lib/dom_utils.coffee index 39c3848d0..65f256e2a 100644 --- a/lib/dom_utils.coffee +++ b/lib/dom_utils.coffee @@ -435,7 +435,10 @@ DomUtils = # Inject user Javascript. injectUserScript: (text) -> - text = text[11..] if text[...11] == "javascript:" + if text[...11] == "javascript:" + text = text[11..].trim() + if text.indexOf " " < 0 + try text = decodeURIComponent text script = document.createElement "script" script.textContent = text document.head.appendChild script From e7b7c8186bd73aa1d7667a3749cb4f593bac4c92 Mon Sep 17 00:00:00 2001 From: gdh1995 Date: Wed, 27 Nov 2019 18:41:50 +0800 Subject: [PATCH 3/3] fix my typo --- lib/dom_utils.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/dom_utils.coffee b/lib/dom_utils.coffee index 65f256e2a..ece9c021a 100644 --- a/lib/dom_utils.coffee +++ b/lib/dom_utils.coffee @@ -436,8 +436,8 @@ DomUtils = # Inject user Javascript. injectUserScript: (text) -> if text[...11] == "javascript:" - text = text[11..].trim() - if text.indexOf " " < 0 + text = text[11...].trim() + if text.indexOf(" ") < 0 try text = decodeURIComponent text script = document.createElement "script" script.textContent = text