1

だから私がやっていることは、file_get_contentsHTML を取得して UTF-8 形式の htmlentities に変換するだけの超シンプルな PHP プロキシを使用することです。その後、AJAX呼び出しを行っているjQueryを使用して、タグを含むHTML全体を<html><head><body>code..</body></head></html>iframeに取得したいので、入力を検索してjQueryでトラバースできます。これを行う方法はありますか?それが歓迎される他の方法で実行できる場合、私はそれが最良の選択肢であると考えたので、iframe を実行しています。これはdoctypeとすべてを含む完全なHTMLドキュメントであるため、divに追加してトラバースすることはできないと思います。私のjQueryコードは次のとおりです。

$(document).ready(function(){

var globalCount = 0;


function countInputs(data, url){
    var unparsedHTML = data.html; // get data from json object which is in htmlentities
    var iframeCreate = $('<iframe id="iframe"></iframe>');
    var iframe = $('#iframe');
    if(iframe.length){
        iframe.remove(); // if iframe exists remove it to clean it
        iframeCreate.insertAfter($('#result'));   //create iframe     
    }else{
        iframeCreate.insertAfter($('#result'));   //create iframe     
    }
    iframe.html(unparsedHTML).text(); // insert html in iframe using html(text).text() to decode htmlentities as seen in some stackoverflow examples
    var inputs = iframe.contents().find('input'); //find inputs on iframe
    var count = inputs.length;
    var output = '';
    globalCount = globalCount + count;
    output = "Count for url: " + url + " is: " + count + " , the global count is: " + globalCount;
    console.log(output);
    $('#result').append(output);
}

/*SNIP ----- SNIP */


function getPage(urls){ 
    console.log("getPage");
    for(i = 0; i < urls.length; i++){
        var u = urls[i];    
        console.log("new request: " + urls[i]);
        var xhr = $.ajax(
        {
            url: "xDomain.php",
            type: "GET",
            dataType: "json",
            data: {
                "url":u
            }
        })

        xhr.done(function(data){
            console.log("Done, starting next function");
            countInputs(data, u)
            });
        xhr.fail(function (jqXHR, textStatus, errorThrown) {
            if (typeof console == 'object' && typeof console.log == 'function') {
                console.log(jqXHR);
                console.log(textStatus);
                console.log(errorThrown);
            }
        });

    }
}

/*SNIP------------SNIP*/

});

問題は、iframe に何もロードされず、エラーがスローされず、要求が成功して応答に HTML が含まれることです。たとえば、URL http://google.comをスクリプトに指定すると、N 個の入力が返されます。GoogleにアクセスしてURLjavascript: alert(document.getElementsByTagName('input').length)を入力すると、N個の入力があるため、N個の入力が警告されます。提供された例ですべてがより明確になることを願っています。

4

3 に答える 3

2

クライアント側でサーバーの仕事をしていますか? 最も明るいアイデアではありません。あなたがこれを行っている理由は、jquery で dom を操作したいからだと思います (simplexml は魅力的ではないのでしょうか?)。この場合、http://querypath.org/を見ることをお勧めします。サーバー用のjqueryです。

于 2013-04-24T17:59:25.673 に答える
0

HTML を に入れるiframeと、エンコードされることに気付きました。iframe にすぐ下の入力が含まれている場合、呼び出し$("iframe input").lengthは 0 を返します。

代わりにa を使用するdivと、HTML はエンコードされず、要素の数を数えることができます。

$(document).ready(function() {

    //works :)
    console.log("inputs in div: " + $("div input").length);

    //returns 0
    console.log("inputs in iframe: " + $("iframe input").length);
});

jsFiddle で実行します

それ以外には問題はありませんが、クロスドメインの制限を克服できる場合は、クライアント側で HTML をフェッチすることもできます (これまでにどのように行うかは考えられません)。

于 2013-04-24T20:18:30.067 に答える