-4

h=Af を取得しようとしています?????????? ソーシャル ネットワーキング サイトのレポート リンクからの値。私はこれでテストします: http://jsfiddle.net/rtnNd/6/値を取得するために、私がテストしたときに動作します。

しかし、私はユーザーがそれを操作したくありません。スクリプトはページを自動取得し、その値を取得する必要があります。(Google Chrome Javascript Consoleでテストします)次のコーディングを試してみると、ページをスクラブして値dに割り当て、hの値を見つけますが、検索/置換はまったく機能しません。その中で getElementsByClassName が機能しないのはなぜですか?

JQuery の場合:

function getParameterByName(name, path) {
        var match = RegExp('[?&]' + name + '=([^&]*)').exec(path);
        return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}

var URL = 'http://www.facebook.com/zuck';
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", URL, true);
xmlhttp.setRequestHeader("Content-type", "application/xhtml+xml");
xmlhttp.send();
xmlhttp.onreadystatechange = function () {
       if (xmlhttp.status == 404) {
               result = error404;
       }
       if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
              var d = xmlhttp.responseText;
               var jayQuery = document.createElement('script');
               jayQuery.src = "//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js";
               document.getElementsByTagName("head")[0].appendChild(jayQuery);
               var href = $($('.hidden_elem').d.replace('<!--', '').replace('-->', '')).find('.itemAnchor[href*="h="]').attr('href');
               var fbhvalue = getParameterByName('h', href);
               alert(fbhvalue);
       }
}

jqueryを追加しても、「エラー:キャッチされていないTypeError:未定義のメソッド 'replace'を呼び出せません」というエラーが表示されます。

JQuery を使用しない場合:

      function getParameterByName(name, path) {
        var match = RegExp('[?&]' + name + '=([^&]*)').exec(path);
        return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}
var URL = 'http://www.facebook.com/zuck';
xmlhttp = new XMLHttpRequest();

xmlhttp.open("GET", URL, true);
xmlhttp.setRequestHeader("Content-type", "application/xhtml+xml");
xmlhttp.send();
xmlhttp.onreadystatechange = function () {
        if (xmlhttp.status == 404) {
                // result = error404;
        }
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                d = xmlhttp.responseText;
                checker(d);
        }
}

function checker(i) {
        i.value = i;

        var hiddenElHtml = i.replace('<!--', '').replace('-->', '').find('.itemAnchor[href*="h="]').attr('href');

        var divObj = document.createElement('div');
        divObj.innerHTML = hiddenElHtml;

        var itemAnchor = divObj.getElementsByClassName('itemAnchor')[0];
        var href = itemAnchor.getAttribute('href');
        var fbId = getParameterByName('h', href);
        alert(fbId);

}

実行すると、「オブジェクトにメソッド 'find' がありません」というエラーが表示されました。

xmlhttp.onreadystatechange ステートメントが呼び出された後、getElementsByClassName、getParameterByName、Jquery、getAttribute が機能しないのはなぜですか? 教えてください。値を取得する方法を見つける方法はありますか? 私の質問を読んで答えてくれてありがとう!

更新: (プロファイル ページにアクセスした場合、Google Chrome の JavaScript コンソールで次のスクリプトを実行すると、h 値が取得されますが、実際にはそのようにしたくありません... ユーザー プロファイル名を指定したいのですが、自動的に取得し、その h 値を取得します。)

    var jayQuery = document.createElement('script');
    jayQuery.src = "//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js";
    document.getElementsByTagName("head")[0].appendChild(jayQuery);

    function getParameterByName(name, path) {
var match = RegExp('[?&]' + name + '=([^&]*)').exec(path);
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
    }


    var href = $($('.hidden_elem')[1].innerHTML.replace('<!--', '').replace('-->', '')).find('.itemAnchor[href*="h="]').attr('href');
    alert(href);
    var fbId = getParameterByName('h', href);
    alert(fbId);
4

2 に答える 2

2

あなたの「with jQuery」の例は、jQueryを使用せずに多くのことを行っています.jQueryがうまく機能するものです。AJAX イベントで jQuery を使用する方法を読みたいと思うかもしれません。これらの例を見て、試してみてください

最初は、jQuery に戸惑うかもしれません。ただし、jQuery Web サイトの例を引き続き見て、試してみてください。他の例については、私の古い投稿のいくつかを見てください。あなたと同じように、私は過去数ヶ月間、火を通してそれを学ばなければなりませんでした.

また、jQueryUI の例を試すことを忘れないでください。ダイアログ、タブ、アコーディオンなどを試すと、喜びに踊ることでしょう。

次のような複雑な jQuery ステートメントの一部を分解することもできます。

var href = $($('.hidden_elem').d.replace('<!--', '').replace('-->', '')).find('.itemAnchor[href*="h="]').attr('href');

次のように jQuery メソッドを連鎖的に追加する$('#myElement').dothis(chain1).dothat(chain2).doanother();と、入力と読み取りは簡単になりますが、トラブルシューティングが困難になります。

幸運を!

于 2012-11-22T23:27:46.460 に答える
0

Facebook の外でこのスクリプトを使用すると、間違いなく SOP が取得ます。これは、セキュリティ上の理由により制限されています。これを参照してください。

したがって、応答 string を取得したと想像してみましょうxmlhttp.responseText。そのため、DOM オブジェクトでのみ機能する一部の JQuery または JavaScript 関数を使用することはできませんが、それは単なる文字列です。たとえば、文字列では機能しないfind()、 、 メソッドを使用しました。attr()あなたはそれを文字列として遊ぶことができます。

于 2012-11-24T19:15:05.677 に答える