2016-08-20 4 views
-1

ウェブページの一部としてダウンロードされたJavascriptを修正したいと思います。ウェブページの一部としてダウンロードされたjavascriptを変更する

私はこのページを持っている: https://discussions.apple.com/thread/7629335

私は、関数jspaginate.initを変更したいと思います。私はこれまでのところ得ている:

console.log(window.jspaginate) 
Object { data: Object, loading: false, init: jspaginate.init(), update: jspaginate.update(), pushState: jspaginate.pushState(), loadingSequence: jspaginate.loadingSequence(), removeLoading: jspaginate.removeLoading(), updateUI: jspaginate.updateUI(), getData: jspaginate.getData() } 
undefined 

console.log(window.jspaginate["init"]) 
function jspaginate.init() 
console.log(window.jspaginate["init"].toString()) 
function (action, last){ 
    var view = this, 
     target, current; 
... clipped ... 

背景: このページではJavaScriptをたくさん含んでいます。 jspaginate関数は、サイトサーバーからダウンロードされます。それにもかかわらず、私は関数jspaginateを変更する必要があります。私はサーバーにアクセスできない。私はjspaginateの私のコピーを変更したい。私は、ダウンロードするたびに機能を変更する必要があることを知っています。

私はいくつかのJavaScriptを挿入するためにGreaseMonkeyを使用しています。

答えて

1

すぐ下のように、その新しい定義でinit関数をオーバーライドします。ここでは

window.jspaginate.init = function() { 
    console.log('there you go'); 
} 
-1

は、私が使用したコードです。 jspaginate.initを文字列に変換して文字列を変更したので、その文字列を関数に変換する必要がありました。私はeval関数を使って変換を行いました。

var debug = 1; 
/* Get the string of the function to change */ 
var stringed = jspaginate["init"].toString(); 
    if (debug) console.log ("--> cloneGotoChange: \n" + stringed); 

/* Place the added code as the last statement in the function jspaginate["init"]  
    Find the function closing } */ 
position = stringed.lastIndexOf("}"); 

/* Change the downloaded javascript */ 
var newCode = stringed.substr(0, position) 
    + " console.log (\"--> before \"); cloneGotoUpate(); console.log (\"--> after \"); " 
    + stringed.substr(position); 

/* Inject the changed code 
    need to use the eval function to make a function assignment instead of a string assignment */ 
eval('jspaginate["init"] =' + newCode); 
    if (debug) console.log (console.log(window.jspaginate["init"].toString())); 
関連する問題