Fandom

Scratchpad

Eval frame.user.js

216,258pages on
this wiki
Add New Page
Discuss this page0 Share

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

// ==UserScript==
// @name      eval frame
// @namespace eval frame
// @include http://localhost/*
// @include http://facebook.mafiawars.com/mwfb/remote/html_server.php*
// @include http://facebook*.vampires.zynga.com/*
// @include http://www.facebook.com/connect/prompt_feed.php*
// @include http://www.facebook.com/connect/uiserver.php*
// @exclude http://facebook*.vampires.zynga.com/landing*.php*
// @exclude http://facebook.mafiawars.com/*xw_action=energy_request*
// ==/UserScript==
 
// * frame.src='javascript:...' not work, if src is different host
 
// gm_startup: in gm context: can access gm environment
// * frame: use this script
// * no frame: use this script (bookmark is not auto and cannot access gm env)
if (GM_getValue('gm_startup')==null)
   GM_setValue('gm_startup', '/* startup script to run in GM environment */');
if (GM_getValue('gm_startup.enable')==null)
   GM_setValue('gm_startup.enable', true);
// * need "try { }", else the exception will break the flow
// * need alert(error), since "try { }" will suppress error in error console
if (GM_getValue('gm_startup.enable', true))
   try_eval_warn(GM_getValue('gm_startup', ''));
 
//location.href = 'javascript:('+encodeURI(function() {
//   try { eval("eval_frame"); } catch (e) {
//      if (typeof eval_frame != "undefined") return;
//      eval_frame = {};
//   }
//})+')(); void(0)';
//try { unsafeWindow.eval("eval_frame"); } catch (e) {
//   if (typeof unsafeWindow.eval_frame != "undefined") return;
//   location.href = 'javascript:eval_frame={};void(0)';
//}
 
// startup: in document context: easy to implement global function
// * frame: use this script
// * no frame: use this script (bookmark is not auto)
// BUG: should warn here?
if (GM_getValue('startup')==null) GM_setValue('startup',
   '/* startup script to run in document environment */'
);
if (GM_getValue('startup.enable')==null)
   GM_setValue('startup.enable', true);
// * the exception not break the flow
// * error shown in error console
if (GM_getValue('startup.enable', true)) location.href =
   'javascript:'+encodeURI(GM_getValue('startup', ''))+';void(0)';
function string_literal(s) {
   // * s/["\\]/\\$&/g
   // LineTerminator is [\r\n\u2028\u2029]
   // * s/[\r]/\\r/g
   // * s/[\n]/\\n/g
   // * s/[\u2028]/\\u2028/g
   // * s/[\u2029]/\\u2029/g
   return '"'+s+"'";
}
//location.href = 'javascript:try_eval_warn('+
//   // * escape() and encodeURIComponent() also encode [+&=]
//   // * encodeURI() not encode [+&=]
//   encodeURI(string_literal(GM_getValue('startup', '')))+
//'); void(0)';
 
// eval box
// * frame: use this script
// * no frame: use location bar
 
// preload
// * frame: use this script
// * no frame: use bookmark
 
if (top == window) return;
// * It also run on framed document
//alert('greasemonkey: '+location);
// * grease monkey cannot access dom inside frame
// * NOTE: this function instance can access greasemonkey object, don't call
//   this instance from document context
function try_eval_warn(val) {
   try {
   //var temp = eval(document.getElementById("eval").value);
   //document.getElementById("eval_result").value = typeof temp + "\n" + temp;
   eval(val);
   } catch (e) { alert(e); }
}
// try { ... } will swallow error by default
function try_eval(val) {
   try { eval(val); } catch (e) { /* warn in debug console? */ }
}
function test_eval(val) {
   try { eval(val); } catch (e) { return false; } return true;
}
// define the function within document context
//location.href =
//    'javascript:if (typeof try_eval_warn=="undefined") try_eval_warn=' +
//       try_eval_warn +
//    '; void(0)';
location.href = 'javascript:if (typeof try_eval_warn=="undefined") '+
   encodeURI(try_eval_warn)+';void(0)';
location.href = 'javascript:if (typeof try_eval=="undefined") '+
   encodeURI(try_eval)+';void(0)';
 
if (GM_getValue('preload_count')==null) GM_setValue('preload_count', 0);
if (GM_getValue('preload[0]')==null)
   GM_setValue('preload[0]', 'my_label: alert("test")');
if (GM_getValue('preload[1]')==null) GM_setValue('preload[1]', 'test');
if (GM_getValue('preload')==null) GM_setValue('preload',
    "/* 1 */ alert('test1')\n/* 2 */ test2"
);
if (GM_getValue('bookmarklet')==null) GM_setValue('bookmarklet',
   "my bookmarklet\nalert('This is sample of bookmarklet.')\n"+
      "item 2\ntest2\n"+
   "\n"+ // blank line to make new paragraph
   "row 2\nalert('2')\n"+
      "...\nalert('...')"
);
 
input = document.createElement('input'); input.type = 'text'; input.size = 100;
add = document.createElement('input'); add.type = 'button';
   add.value = 'clone'; add.setAttribute('onclick',
      'form.parentNode.insertBefore(form.cloneNode(true), form.nextSibling);'
   );
form = document.createElement('form'); form.appendChild(input);
   form.appendChild(add);
form.action = 'javascript:void(0)'; // ensure to not navigate out of page
//form.onsubmit = 'try_eval_warn(this.firstChild.value); return false;';
form.setAttribute('onsubmit',
   // not work if element resizer is used
   //'try_eval_warn(this.firstChild.value); void(0); return false;'
   // this work with element resizer
   'try_eval_warn(this.elements.item(0).value); void(0); return false;'
);
body = document.getElementsByTagName('body').item(0);
 
preload_count = GM_getValue('preload_count', 0);
preload = GM_getValue('preload', '');
preload = preload=="" ? [] : preload.split("\n");
if (preload_count > 0) form.firstChild.value = GM_getValue('preload[0]', '');
else if (preload.length > 0) form.firstChild.value = preload[0];
body.insertBefore(form, refChild = body.firstChild);
 
for (var i = 1; i < preload_count; ++i) {
   form = form.cloneNode(true);
   form.firstChild.value = GM_getValue('preload['+i+']', '');
   body.insertBefore(form, refChild);
}
for (var i = preload_count > 0 ? 0 : 1; i < preload.length; ++i) {
   form = form.cloneNode(true);
   form.firstChild.value = preload[i];
   body.insertBefore(form, refChild);
}
 
var bookmark = GM_getValue('bookmarklet', '').split("\n");
var div = document.createElement('div'); body.insertBefore(div, refChild);
// * label on <button> must be childNode
//var bookmark_form = document.createElement('button');
var bookmark_form = document.createElement('input');
bookmark_form.type = 'button';
for (var i = 0; i < bookmark.length; ++i) {
   var label = bookmark[i]; if (label == '') {
      body.insertBefore(div=document.createElement('div'), refChild); continue;
   }
   if (++i >= bookmark.length) break;
   var val = bookmark[i];
   bookmark_form = bookmark_form.cloneNode(true);
   bookmark_form.value = label;
   //bookmark_form.setAttribute('onclick', val+';return false;void(0)');
   // * bookmark_form.script is not visible to document context
   //bookmark_form.script = val; bookmark_form.setAttribute('onclick',
   //   'try_eval_warn(script);return false;void(0)'
   //);
   bookmark_form.setAttribute('script', val);
   bookmark_form.setAttribute('onclick',
      'try_eval_warn(getAttribute("script"));return false;void(0)'
   );
   div.appendChild(bookmark_form);
}

Also on Fandom

Random wikia