v_jstools/tools/bgscript/replacer.js
2022-11-27 16:45:57 +08:00

61 lines
1.6 KiB
JavaScript

var typeMap = {
"txt" : "text/plain",
"html" : "text/html",
"htm" : "text/html",
"css" : "text/css",
"js" : "text/javascript",
"json" : "text/json",
"xml" : "text/xml",
"jpg" : "image/jpeg",
"gif" : "image/gif",
"png" : "image/png",
"webp" : "image/webp"
}
function getLocalFileUrl(url) {
var arr = url.split('.');
var type = arr[arr.length-1];
var xhr = new XMLHttpRequest();
xhr.open('get', url, false);
xhr.send(null);
var content = xhr.responseText || xhr.responseXML;
if (!content) {
return false;
}
var wordArray = CryptoJS.enc.Utf8.parse(content);
var base64 = CryptoJS.enc.Base64.stringify(wordArray);
return ("data:" + (typeMap[type] || typeMap.txt) + ";charset=utf-8;base64," + base64);
}
chrome.webRequest.onBeforeRequest.addListener(function (details) {
if(!JSON.parse(localStorage.webRedirect_toggle || "false")){
return {}
}
var url = details.url;
for (var i = 0; i < webRedirect.length; i++) {
var [mstr, rurl] = webRedirect[i]
if (url.indexOf(mstr) != -1){
if (rurl.trim().indexOf('file:///') == 0){
var rdata = getLocalFileUrl(rurl)
if (rdata){
return { redirectUrl: rdata };
}
}
}
}
return {}
},
{urls: ["<all_urls>"]},
["blocking"]
);
var webRedirect = []
window.addEventListener('storage', function(){
webRedirect = JSON.parse(localStorage.webRedirect || "[]")
}, false);
chrome.storage.local.get([
"response_changer",
], function(res){
var init_data = JSON.parse(res["response_changer"] || "[]")
webRedirect = init_data
})