2012-02-27 16 views
0

greasemonkeyで解析されているWebページの関数の中から条件変数を取得するにはどうすればよいですか?このような関数内から条件変数を取得する方法は?

何か:

var myglobal = 5; 

function myfunc() { 
    myglobal = myglobal -1; 
    if (myglobal == -1) { 
     var this1 = 'Test'; 
     document.getElementById("mybutton").href = this1; 
    } 
} 

この場合、私が直接または修正する、「this1」であるものを読みたい「myfunc関数」を呼び出すと、何とかからのhrefの値を取得し、「myglobal」 'mybutton' ...どんなアイデア?

+0

を。どうしたの? –

+0

myfuncはカウンタで、スキップします。それ以外の場合は、mybutton.hrefはまだ設定されていません。また、unsafeWindowを使用してアクセスする必要はありませんか? – bloodyshade

+0

fyi:javascript変数はスコープの上部で(ホイストして)宣言され、 'this1'は実際には' myfunc() '全体に存在します(see" javascript hoisting ") – ckozl

答えて

1

通常、そのようなスコープの外からは可変の値を得ることはできませんが、この場合はそうである必要はありません。

"myfuncはカウンタで、スキップします。それ以外の場合は、mybutton.hrefはまだ設定されていません。"

サンプルコードに基づいて、あなただけ使って、そのタイマーをだますことができるかもしれない:(。実際には、私は1つの非常に見当違いのトレーニングサイトにこの正確なテクニックを使用)

unsafeWindow.myglobal = 0; 


上記の質問にさらに回答するには、そのようなスコープ内から動的な値を取得することはできませんが、この問題のように見える初期状態で十分です。

ですから、myfunc()のコードを取得し、所望の値を取得するために正規表現でそれを解析できます `のdocument.getElementById( "myButtonという")href`:ちょうど` href`値を取得

var theFunc  = unsafeWindow.myfunc.toString(); 
var desiredHref = theFunc.match (/var\s+this1\s*=\s*["']([^"']+)["']/); 
if (desiredHref.length > 1) { 
    // Found! 
    desiredHref = desiredHref[1]; 
} 
関連する問題