0

文字列変数に JS スクリプト全体があるとします。スクリプト全体を実行するのではなく、そのコードを十分に評価して、スクリプトが実行された場合に (Ajax 経由で) どの URL を取得しようとするかを調べたいだけです。

コードをテキストとして正規表現検索を実行することもできますが、replace().

これは、Javascript を使用して行う必要があります。

可能であれば、これがどのように可能になるかについて、誰かが少なくともヒントを提供できますか?

編集: 文脈上、私のプロジェクトは、userscripts.org のスクリプト リストから Facebook スパム詐欺を除外するグリースモンキー スクリプトを作成することです。私は、詐欺に使用される一般的な facebook の ajax URL を単純なテキスト検索するものをすでに用意していますが、詐欺の作成者はすでにそれを回避する方法を見つけようとしています。すべての Ajax URL をある程度確実にキャッチしてチェックする必要があります。それらがどのように組み合わされ、文字列関数で変更されたかに関係なくです。興味がある場合は、 http://userscripts.org/scripts/show/163038を参照してください。

4

2 に答える 2

0

全体が変数にあると言います...文字列として意味していると思います。あらゆるものの文字列表現を使用すると、必要に応じてそれを適切に解析できます。トリッキーな部分は、それを適切に行うことです。ここで RegEx (正規表現) を調べてください: http://www.regular-expressions.info/tutorial.html

URLを見つけるための正規表現は次のとおりです。

^http(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$

Re: コメント

上記の文字列のすべての可能なインスタンスを BuildString() 関数内で連結し、結果を含む単一の文字列を返し、返された変数を URL に対して正規表現することができます。

いいえ:

function Concatenation() {
    var _strOutput = "<script>var x = 0; x += " + GetVariableIterator() + "; return x; </script>";
    return _strOutput;
}

function FinalResult() {
    var _strCombined = Concatenation();
    // Do Regex and work with URLs
}
于 2013-04-03T14:30:37.080 に答える
0

このトピックが役立つかもしれません:すべての ajax 呼び出しをインターセプトしますか?

実際、XHR を再定義して、Javascript フレームワークに依存するのではなく、意図したとおりに ajax 呼び出しを動作させることができます。

var ajax_urls = new Array();
var XHR_backup = new Array();
XHR_backup.open = XMLHttpRequest.prototype.open;
XHR_backup.send = XMLHttpRequest.prototype.send;

// Customize XHR behaviour
(function(XHR, ajax_urls) {
    "use strict";

    var open = XHR.prototype.open;
    var send = XHR.prototype.send;

    XHR.prototype.open = function(method, url, async, user, pass) {
        ajax_urls.push(url);
    };

    XHR.prototype.send = function(data) {
    }
})(XMLHttpRequest, ajax_urls);

// Evaluate your script
eval(resultScript);

for (var i = 0; i < ajax_urls.length; i++) {
    alert('Hey, my super XHR fetched ' + ajax_urls[i] + ' !!');
}

// Restore initial XHR behaviour
XMLHttpRequest.prototype.open = XHR_backup.open;
XMLHttpRequest.prototype.send = XHR_backup.send;

編集:このスニペットはまだテストしていないので、フィードバックをお待ちしています。

Edit2:テスト済みで動作中! http://jsfiddle.net/3qVUP/1/

于 2013-04-03T14:55:51.207 に答える