[1] わかりました、正直に言うと、これをどう呼ぶかさえ知りません。それでは、私が何をしようとしているのかを示すために、いくつかの半疑似コードを取得しましょう。createDocument()
私はjQueryを使用して、ページ内、要素内、AJAX呼び出しから宣言された既存のスクリプトを取得しています。
GM_xmlhttprequest({ ... ロード:関数(r){ var doc = document_from_string(r.responseText); script_content = $('body script:regex(html, local_xw_sig)', doc).html(); var scriptEl = document.createElement('script'); scriptEl.type = 'text/javascript'; scriptEl.innerHTML = script_content; // ここまではいい (関数(sc){ eval(sc.innerHTML); // これとまったく同じではありませんが、おわかりのように、エラーが発生します alert('ここに来ない' + local_xw_sig); // local_xw_sig はソース内のグローバルな「var」です })(scriptEl); } });
これまでのところ、スクリプトには実際にスクリプト ブロック全体のソースが含まれています。さて、この「script_content」内には、$(document).ready(function(){...}) のような自動実行関数があり、すべてが innerHTML を「評価」し、このコードを実行して、カプセル化されたスクリプトを停止します。 . 存在しない変数など。
正規表現を使用してスクリプトの特定の部分を削除することは、実際にはオプションではありません...私が本当に望んでいたのは、関数内を「歩く」ことです。のように(完全に架空の):
script = eval("function(){" + script_content + "};"); alert(script['local_xw_sig']); // a03ucc34095cw3495
関数を「逆アセンブル」して、その中の「var」に到達できる方法はありますか? この関数のように:
関数ハロー(){ var message = "こんにちは"; } アラート (こんにちは。メッセージ); // message = 関数内の var
それはまったく可能ですか?または、正規表現を使用して自分のやり方をハックする必要がありますか? ;P
[2] また、「createDocument」で作成したドキュメント内で JavaScript にアクセスする方法はありますか?