diff --git a/package.json b/package.json index 342342b..2cd3bfe 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "eslint-plugin-prettier": "^3.1.3", "eslint-plugin-vue": "^6.2.2", "prettier": "^1.19.1", - "vue-cli-plugin-browser-extension": "latest", + "vue-cli-plugin-browser-extension": "^0.25.1", "vue-template-compiler": "^2.6.11" }, "_id": "iitc-button@0.1.0", diff --git a/public/assets/iconfont/material-icons.css b/public/assets/iconfont/material-icons.css index dd93f51..79b442f 100644 --- a/public/assets/iconfont/material-icons.css +++ b/public/assets/iconfont/material-icons.css @@ -5,9 +5,7 @@ font-family: 'Material Icons'; font-style: normal; font-weight: 400; - src: local('Material Icons'), - local('MaterialIcons-Regular'), - url(MaterialIcons-Regular.woff2) format('woff2'); + src: url(MaterialIcons-Regular.woff2) format('woff2'); } .material-icons { diff --git a/src/background/background.js b/src/background/background.js index 9f944e5..fc755ad 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -27,6 +27,9 @@ browser.runtime.onMessage.addListener(async request => { case "toggleIITC": await onToggleIITC(request.value); break; + case "xmlHttpRequestHandler": + await xmlHttpRequestHandler(request.value); + break; } }); @@ -59,3 +62,38 @@ browser.runtime.onMessage.addListener(function(request) { break; } }); + +async function xmlHttpRequestHandler(data) { + async function xmlResponse(tab_id, callback, response) { + const injectedCode = ` + document.dispatchEvent(new CustomEvent('onXmlHttpRequestHandler', { + detail: JSON.stringify({ + callback: "${String(callback)}", + response: ${String(response)} + }) + })); + `; + + try { + await browser.tabs.executeScript(data.tab_id, { + code: injectedCode + }); + } catch (error) { + console.error(`An error occurred while execute script: ${error.message}`); + } + } + + const req = new XMLHttpRequest(); + req.onload = function() { + const response = { + readyState: this.readyState, + responseHeaders: this.responseHeaders, + responseText: this.responseText, + status: this.status, + statusText: this.statusText + }; + xmlResponse(data.tab_id, data.onload, JSON.stringify(response)); + }; + req.open(data.method, data.url, true, data.user, data.password); + req.send(); +} diff --git a/src/background/injector.js b/src/background/injector.js index e593d70..71f8391 100644 --- a/src/background/injector.js +++ b/src/background/injector.js @@ -1,17 +1,18 @@ //@license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3 export async function injectUserScript(code, tabs) { - const inject = ` + if (tabs === undefined) tabs = await getTabsToInject(); + + for (let tab of Object.values(tabs)) { + const inject = ` document.dispatchEvent(new CustomEvent('IITCButtonInitJS', { - detail: ${JSON.stringify(code)} + detail: ${JSON.stringify({ code: code, tab_id: tab.id })} })); `; - if (tabs === undefined) tabs = await getTabsToInject(); - - for (let tab of Object.values(tabs)) { try { await browser.tabs.executeScript(tab.id, { - code: inject + code: inject, + runAt: "document_end" }); } catch (error) { console.error(`An error occurred while reloading tabs: ${error.message}`); diff --git a/src/background/intel.js b/src/background/intel.js index 2340e58..846571f 100644 --- a/src/background/intel.js +++ b/src/background/intel.js @@ -1,5 +1,4 @@ //@license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3 -import { getUID, parse_meta, preparationUserScript } from "../helpers"; import { getTabsToInject, injectUserScript } from "./injector"; let lastIITCTab = null; @@ -63,9 +62,6 @@ async function initialize() { "release_iitc_code", "test_iitc_code", "local_iitc_code", - "release_iitc_version", - "test_iitc_version", - "local_iitc_version", "release_plugins_flat", "test_plugins_flat", "local_plugins_flat", @@ -81,7 +77,6 @@ async function initialize() { const status = data["IITC_is_enabled"]; const iitc_code = data[channel + "_iitc_code"]; - const iitc_version = data[channel + "_iitc_version"]; const plugins_local = data[channel + "_plugins_local"]; const plugins_user = data[channel + "_plugins_user"]; @@ -90,32 +85,19 @@ async function initialize() { const tabs = await getTabsToInject(); const userscripts = []; - const iitc_meta = parse_meta(iitc_code); - const iitc_uid = getUID(iitc_meta); - const inject_iitc_code = preparationUserScript( - { - version: iitc_version, - code: iitc_code - }, - iitc_uid - ); - userscripts.push(inject_iitc_code); - const plugins_flat = data[channel + "_plugins_flat"]; for (const uid of Object.keys(plugins_flat)) { if (plugins_flat[uid]["status"] === "on") { userscripts.push( - preparationUserScript( - plugins_flat[uid]["user"] === true - ? plugins_user[uid] - : plugins_local[uid], - uid - ), - tabs + plugins_flat[uid]["user"] === true + ? plugins_user[uid]["code"] + : plugins_local[uid]["code"] ); } } + userscripts.push(iitc_code); + await Promise.all(userscripts.map(code => injectUserScript(code, tabs))); } } diff --git a/src/background/manager.js b/src/background/manager.js index bb98597..af9afc8 100644 --- a/src/background/manager.js +++ b/src/background/manager.js @@ -1,14 +1,6 @@ //@license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3 -import { - _, - ajaxGet, - clearWait, - getUID, - parse_meta, - preparationUserScript, - wait -} from "../helpers"; +import { _, ajaxGet, clearWait, getUID, parseMeta, wait } from "../helpers"; import { on_extension_update } from "./extension"; import { injectUserScript } from "./injector"; @@ -303,7 +295,7 @@ async function updateExternalPlugins(local) { // download meta info const response_meta = await getUrl(plugin["updateURL"] + hash); if (response_meta) { - let meta = parse_meta(response_meta); + let meta = parseMeta(response_meta); // if new version if ( meta && @@ -377,12 +369,9 @@ export async function managePlugin(uid, category, action) { } await injectUserScript( - preparationUserScript( - plugins_flat[uid]["user"] === true - ? plugins_user[uid] - : plugins_local[uid], - uid - ) + plugins_flat[uid]["user"] === true + ? plugins_user[uid]["code"] + : plugins_local[uid]["code"] ); await save({ @@ -400,7 +389,7 @@ export async function managePlugin(uid, category, action) { plugins_local[uid] = plugins_flat[uid]; plugins_local[uid]["code"] = response; - await injectUserScript(preparationUserScript(plugins_local[uid], uid)); + await injectUserScript(plugins_local[uid]["code"]); await save({ plugins_flat: plugins_flat, diff --git a/src/choose_file/BlockDrop.vue b/src/choose_file/BlockDrop.vue index ad7a790..5d9f751 100644 --- a/src/choose_file/BlockDrop.vue +++ b/src/choose_file/BlockDrop.vue @@ -32,7 +32,7 @@