Fix for Cyrillic in source
This commit is contained in:
parent
d52b9faa89
commit
884d025ca9
3 changed files with 22 additions and 30 deletions
25
lib/popup.js
25
lib/popup.js
|
@ -240,12 +240,6 @@
|
||||||
* Set-up data (script, enable, include, extra)
|
* Set-up data (script, enable, include, extra)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Backward compatibility (version <1 and 1)
|
|
||||||
if( response.customjs && response.customjs.src ) {
|
|
||||||
response.customjs.source = decodeURI(response.customjs.src); // Old format ...
|
|
||||||
delete response.customjs.src;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set-up data pattern if empty
|
// Set-up data pattern if empty
|
||||||
if( !popup.data ) {
|
if( !popup.data ) {
|
||||||
popup.data = $.extend(true, {}, popup.emptyDataPattern);
|
popup.data = $.extend(true, {}, popup.emptyDataPattern);
|
||||||
|
@ -259,6 +253,10 @@
|
||||||
popup.data.source = popup.data.source.replace('data:text/javascript;base64,', '');
|
popup.data.source = popup.data.source.replace('data:text/javascript;base64,', '');
|
||||||
popup.data.source = atob(popup.data.source);
|
popup.data.source = atob(popup.data.source);
|
||||||
}
|
}
|
||||||
|
else if( popup.data.source.indexOf('data:text/javascript;charset=utf-8,') === 0 ) {
|
||||||
|
popup.data.source = popup.data.source.replace('data:text/javascript;charset=utf-8,', '');
|
||||||
|
popup.data.source = decodeURIComponent(popup.data.source);
|
||||||
|
}
|
||||||
|
|
||||||
// Set storage to store data accessible ONLY from current host
|
// Set storage to store data accessible ONLY from current host
|
||||||
popup.storage.setMode(popup.storage.MODE.private);
|
popup.storage.setMode(popup.storage.MODE.private);
|
||||||
|
@ -272,6 +270,19 @@
|
||||||
popup.applyData(popup.storage.get('draft'));
|
popup.applyData(popup.storage.get('draft'));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
generateScriptDataUrl: function(script) {
|
||||||
|
var b64 = 'data:text/javascript';
|
||||||
|
// base64 may be smaller, but does not handle unicode characters
|
||||||
|
// attempt base64 first, fall back to escaped text
|
||||||
|
try {
|
||||||
|
b64 += (';base64,' + btoa(script));
|
||||||
|
}
|
||||||
|
catch(e) {
|
||||||
|
b64 += (';charset=utf-8,' + encodeURIComponent(script));
|
||||||
|
}
|
||||||
|
|
||||||
|
return b64;
|
||||||
|
},
|
||||||
applyData: function(data, notDraft) {
|
applyData: function(data, notDraft) {
|
||||||
|
|
||||||
if( data && !notDraft ) {
|
if( data && !notDraft ) {
|
||||||
|
@ -338,7 +349,7 @@
|
||||||
|
|
||||||
// Transform source for correct apply
|
// Transform source for correct apply
|
||||||
data.config.extra = data.config.extra.replace("\n", ';');
|
data.config.extra = data.config.extra.replace("\n", ';');
|
||||||
data.source = 'data:text/javascript;base64,' + btoa(data.source);
|
data.source = popup.generateScriptDataUrl(data.source);
|
||||||
|
|
||||||
// Send new data to apply
|
// Send new data to apply
|
||||||
chrome.tabs.sendRequest(popup.tabId, {method: "setData", customjs: data, reload: true});
|
chrome.tabs.sendRequest(popup.tabId, {method: "setData", customjs: data, reload: true});
|
||||||
|
|
21
lib/run.js
21
lib/run.js
|
@ -7,21 +7,7 @@
|
||||||
|
|
||||||
var customjs = localStorage['customjs'];
|
var customjs = localStorage['customjs'];
|
||||||
if( customjs ) {
|
if( customjs ) {
|
||||||
try {
|
|
||||||
customjs = JSON.parse(customjs);
|
customjs = JSON.parse(customjs);
|
||||||
}
|
|
||||||
catch(e) {
|
|
||||||
// Backward compatibility (version >1)
|
|
||||||
customjs = {
|
|
||||||
source: customjs,
|
|
||||||
config: {
|
|
||||||
enable: true,
|
|
||||||
include: '',
|
|
||||||
extra: ''
|
|
||||||
}
|
|
||||||
};
|
|
||||||
localStorage['customjs'] = JSON.stringify(customjs);
|
|
||||||
}
|
|
||||||
|
|
||||||
if( customjs.config.enable ) {
|
if( customjs.config.enable ) {
|
||||||
|
|
||||||
|
@ -39,13 +25,8 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
// Script
|
// Script
|
||||||
if( customjs.source || customjs.src ) {
|
if( customjs.source ) {
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
// Backward compatibility (version 1)
|
|
||||||
if( customjs.src ) {
|
|
||||||
customjs.source = 'data:text/javascript,' + customjs.src;
|
|
||||||
}
|
|
||||||
|
|
||||||
injectScript(customjs.source, 'body');
|
injectScript(customjs.source, 'body');
|
||||||
}, 250);
|
}, 250);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"name": "Custom JavaScript for websites ",
|
"name": "Custom JavaScript for websites ",
|
||||||
"short_name": "customjs",
|
"short_name": "customjs",
|
||||||
"description": "Run custom JavaScript on any website.",
|
"description": "Run custom JavaScript on any website.",
|
||||||
"version": "2.1.2",
|
"version": "2.1.3",
|
||||||
|
|
||||||
"permissions": [
|
"permissions": [
|
||||||
"storage",
|
"storage",
|
||||||
|
|
Reference in a new issue