|
@@ -47,9 +47,9 @@ var comm={
|
|
|
vmid:'VM'+Math.random(),
|
|
vmid:'VM'+Math.random(),
|
|
|
sid:null,
|
|
sid:null,
|
|
|
did:null,
|
|
did:null,
|
|
|
- elements:null,
|
|
|
|
|
state:0,
|
|
state:0,
|
|
|
load:function(){},
|
|
load:function(){},
|
|
|
|
|
+ utf8decode:utf8decode,
|
|
|
prop1:Object.getOwnPropertyNames(window),
|
|
prop1:Object.getOwnPropertyNames(window),
|
|
|
prop2:(function(n,p){
|
|
prop2:(function(n,p){
|
|
|
while(n=Object.getPrototypeOf(n)) p=p.concat(Object.getOwnPropertyNames(n));
|
|
while(n=Object.getPrototypeOf(n)) p=p.concat(Object.getOwnPropertyNames(n));
|
|
@@ -83,9 +83,7 @@ var comm={
|
|
|
loadScript:function(o){
|
|
loadScript:function(o){
|
|
|
var start=[],idle=[],end=[],cache,require,values,comm=this;
|
|
var start=[],idle=[],end=[],cache,require,values,comm=this;
|
|
|
comm.command={};comm.requests={};comm.qrequests=[];
|
|
comm.command={};comm.requests={};comm.qrequests=[];
|
|
|
- function wrapper(c){
|
|
|
|
|
- var t=this,value=values[c.uri];if(!value) value={};
|
|
|
|
|
-
|
|
|
|
|
|
|
+ function wrapper(){
|
|
|
// functions and properties
|
|
// functions and properties
|
|
|
function wrapFunction(o,i,c){
|
|
function wrapFunction(o,i,c){
|
|
|
var f=function(){
|
|
var f=function(){
|
|
@@ -109,19 +107,23 @@ var comm={
|
|
|
});
|
|
});
|
|
|
}catch(e){}
|
|
}catch(e){}
|
|
|
}
|
|
}
|
|
|
- var itemWrapper=null;comm.prop1.forEach(wrapItem);
|
|
|
|
|
- itemWrapper=wrapFunction;comm.prop2.forEach(wrapItem);
|
|
|
|
|
-
|
|
|
|
|
|
|
+ var t=this,itemWrapper=null;
|
|
|
|
|
+ comm.prop1.forEach(wrapItem);
|
|
|
|
|
+ itemWrapper=wrapFunction;
|
|
|
|
|
+ comm.prop2.forEach(wrapItem);
|
|
|
|
|
+ }
|
|
|
|
|
+ function wrapGM(c){
|
|
|
|
|
+ var gm={},value=values[c.uri];if(!value) value={};
|
|
|
function getCache(name){for(var i in resources) if(name==i) return cache[resources[i]];}
|
|
function getCache(name){for(var i in resources) if(name==i) return cache[resources[i]];}
|
|
|
function propertyToString(){return 'Property for Violentmonkey: designed by Gerald';}
|
|
function propertyToString(){return 'Property for Violentmonkey: designed by Gerald';}
|
|
|
function addProperty(name,prop,obj){
|
|
function addProperty(name,prop,obj){
|
|
|
if('value' in prop) prop.writable=false;
|
|
if('value' in prop) prop.writable=false;
|
|
|
prop.configurable=false;
|
|
prop.configurable=false;
|
|
|
- if(!obj) {obj=t;ele.push(name);}
|
|
|
|
|
|
|
+ if(!obj) obj=gm;
|
|
|
Object.defineProperty(obj,name,prop);
|
|
Object.defineProperty(obj,name,prop);
|
|
|
if(typeof obj[name]=='function') obj[name].toString=propertyToString;
|
|
if(typeof obj[name]=='function') obj[name].toString=propertyToString;
|
|
|
}
|
|
}
|
|
|
- var resources=c.meta.resources||{},ele=[];
|
|
|
|
|
|
|
+ var resources=c.meta.resources||{};
|
|
|
addProperty('unsafeWindow',{value:window});
|
|
addProperty('unsafeWindow',{value:window});
|
|
|
|
|
|
|
|
// GM functions
|
|
// GM functions
|
|
@@ -175,7 +177,7 @@ var comm={
|
|
|
}});
|
|
}});
|
|
|
addProperty('GM_getResourceText',{value:function(name){
|
|
addProperty('GM_getResourceText',{value:function(name){
|
|
|
var b=getCache(name);
|
|
var b=getCache(name);
|
|
|
- if(b) b=utf8decode(b);
|
|
|
|
|
|
|
+ if(b) b=comm.utf8decode(b);
|
|
|
return b;
|
|
return b;
|
|
|
}});
|
|
}});
|
|
|
addProperty('GM_getResourceURL',{value:function(name){
|
|
addProperty('GM_getResourceURL',{value:function(name){
|
|
@@ -225,19 +227,23 @@ var comm={
|
|
|
var r=new Request(details);
|
|
var r=new Request(details);
|
|
|
return r.req;
|
|
return r.req;
|
|
|
}});
|
|
}});
|
|
|
- if(!comm.elements) comm.elements=ele;
|
|
|
|
|
|
|
+ return gm;
|
|
|
}
|
|
}
|
|
|
function run(l){while(l.length) runCode(l.shift());}
|
|
function run(l){while(l.length) runCode(l.shift());}
|
|
|
function runCode(c){
|
|
function runCode(c){
|
|
|
- var req=c.meta.require||[],i,r=[],code=[],w=new wrapper(c);
|
|
|
|
|
- comm.elements.forEach(function(i){r.push(i+'=window.'+i);});
|
|
|
|
|
- code=['(function(){'];
|
|
|
|
|
- if(r.length) code.push('var '+r.join(',')+';');
|
|
|
|
|
|
|
+ var w,req=c.meta.require||[],i,r=[],code=[],g;
|
|
|
|
|
+ if(w=i=c.meta.namespace) w=wrappers[w];
|
|
|
|
|
+ if(!w) w=new wrapper();
|
|
|
|
|
+ if(i) wrappers[i]=w;
|
|
|
|
|
+ g=wrapGM(c);
|
|
|
|
|
+ Object.getOwnPropertyNames(g).forEach(function(i){r.push(i+'=g["'+i+'"]');});
|
|
|
|
|
+ code=[];
|
|
|
|
|
+ if(r.length) code.push('var '+r.join(',')+';delete g;with(this)(function(){');
|
|
|
for(i=0;i<req.length;i++) if(r=require[req[i]]) code.push(r);
|
|
for(i=0;i<req.length;i++) if(r=require[req[i]]) code.push(r);
|
|
|
code.push(c.code);code.push('}).call(window);');
|
|
code.push(c.code);code.push('}).call(window);');
|
|
|
code=code.join('\n');
|
|
code=code.join('\n');
|
|
|
try{
|
|
try{
|
|
|
- (new Function('w','with(w) '+code)).call(this,w);
|
|
|
|
|
|
|
+ (new Function('g',code)).call(w,g);
|
|
|
}catch(e){
|
|
}catch(e){
|
|
|
console.log('Error running script: '+(c.custom.name||c.meta.name||c.id)+'\n'+e);
|
|
console.log('Error running script: '+(c.custom.name||c.meta.name||c.id)+'\n'+e);
|
|
|
}
|
|
}
|
|
@@ -247,7 +253,7 @@ var comm={
|
|
|
if(comm.state>1) run(end);
|
|
if(comm.state>1) run(end);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- var l;
|
|
|
|
|
|
|
+ var l,wrappers={};
|
|
|
o.scripts.forEach(function(i){
|
|
o.scripts.forEach(function(i){
|
|
|
if(i&&i.enabled) {
|
|
if(i&&i.enabled) {
|
|
|
switch(i.custom['run-at']||i.meta['run-at']){
|
|
switch(i.custom['run-at']||i.meta['run-at']){
|