2016-07-22 33 views
0

Ich versuche, den Quellcode aus einer URL-Webseite mit JSONP zu bekommen. Dies ist der Code:Holen Sie einen Quellcode von URL-Webseite mit JavaScript mit JSONP

<script type="text/javascript"> 
var your_url = ''; 

$(document).ready(function(){ 
jQuery.ajax = (function(_ajax){ 

var protocol = location.protocol, 
    hostname = location.hostname, 
    exRegex = RegExp(protocol + '//' + hostname), 
    YQL = 'http' + (/^https/.test(protocol)?'s':'') + '://query.yahooapis.com/v1/public/yql?callback=?', 
    query = 'select * from html where url="{URL}" and xpath="*"'; 

function isExternal(url) { 
    return !exRegex.test(url) && /:\/\//.test(url); 
} 

return function(o) { 

    var url = o.url; 

    if (/get/i.test(o.type) && !/json/i.test(o.dataType) && isExternal(url)) { 
     // Manipulate options so that JSONP-x request is made to YQL 

     o.url = YQL; 
     o.dataType = 'json'; 

     o.data = { 
      q: query.replace(
       '{URL}', 
       url + (o.data ? 
        (/\?/.test(url) ? '&' : '?') + jQuery.param(o.data) 
       : '') 
      ), 
      format: 'xml' 
     }; 

     // Since it's a JSONP request 
     // complete === success 
     if (!o.success && o.complete) { 
      o.success = o.complete; 
      delete o.complete; 
     } 

     o.success = (function(_success){ 
      return function(data) { 

       if (_success) { 
        // Fake XHR callback. 
        _success.call(this, { 
         responseText: data.results[0] 
          // YQL screws with <script>s 
          // Get rid of them 
          .replace(/<script[^>]+?\/>|<script(.|\s)*?\/script>/gi, '') 
        }, 'success'); 
       } 

      }; 
     })(o.success); 

    } 

    return _ajax.apply(this, arguments); 

}; 

})(jQuery.ajax); 

$.ajax({ 
    url: your_url, 
    type: 'GET', 
    success: function(res) { 
     var text = res.responseText; 
     //document.getElementById("contenuto").innerHTML = text; 

    alert(text); 
} 
}); 


}); 
</script> 

ich mit einer Warnung der gesamten Quellcode, aus der URL gedruckt.

alert(text); 

Zuerst, wie man weiß, ob der gedruckte Code der ganze Netzcode der Seite ist? Wenn ich versuche, auf diese Weise zu tun

document.getElementById("contenuto").innerHTML = text; 

das ist das Ergebnis:

\ \ <'+'/ins>\ \ \ '); } ]]> 

Ich habe versucht, HTML DOM zu verwenden, nur ein Element zu drucken, auf diese Weise zu tun

document.getElementById("contenuto").innerHTML = text; 
var elem = text.getElementById("strip_adv").innerHTML; 
document.getElementById("contenuto_1").innerHTML = elem; 

} 

Aber das ist der Fehler auf der JS-Konsole:

text.getElementById is not a function 

Recap: Ich würde den Quellcode einer Webseite von URL erhalten, mit JSONP. Ich würde HTML-DOM aus dem zurückgegebenen Text verwenden, um nur das Element/die Klasse zu behalten, die ich brauche. Ich bin ein Neuling auf JS, ich versuche mehr zu lernen & mehr über JS.

+0

'responsetext' kein Element ist. Sie sollten versuchen, es zu analysieren. – mok

+0

@mok Wenn ich versuchte, mit diesem Code zu drucken document.getElementById ("contenuto"). InnerHTML = Text; Dies ist das Ergebnis ist: [screen1] (https://postimg.org/image/erjvgz9s7/) Warum? Zuerst würde ich die ganze "Zeichenfolge" (Quellcode der Seite) drucken, um zu überprüfen, ob sie vollständig ist. Aber ich kann nicht. – Jackie

+0

Scheint, dass der Code die Seite nicht richtig analysiert. Versuchen Sie es mit einer einfachen Seite wie dieser [http://www.murgaboots.com/aboutus.html] (zufällig ausgewählt, nur als eine einfache Webseite). Wie auch immer, die Antwort ist, was ich vorher gesagt habe, du solltest den "responsetext" analysieren. – mok

Antwort

0

getElementById() ist nur im Dokumentobjekt vorhanden. Sie versuchen, von einem String-Objekt auf getElementId zuzugreifen.

Stattdessen würde ich vorschlagen, die zurückgegebene HTML-Zeichenfolge in iframe einfügen und Sie können auf die Elemente innerhalb iframe zugreifen, sonst Sie können eine Art HTML-Parser in Ihrer Anwendung verwenden.

können sagen, Ihre HTML sieht wie folgt aus, nachdem Sie innerhalb iframe Ihre HTML-String einfügen

<body> 
    <iframe id="one"> 
     <html> 
     <body> <h1 id="strip_adv">Heading</h1> </body> 
     </html 
    </iframe> 
</body> 

function iframeObj(frameEle) { 
    return frameEle.contentWindow 
     ? frameEle.contentWindow.document 
     : frameEle.contentDocument 
} 

var element = iframeObj(document.getElementById('strip_adv')); 
+0

Dies ist, was passiert, wie du es mir gesagt hast. [screen1] (https://postimg.org/image/rqb5gvzaf/) Nach 1-2sec [screen2] (https://postimg.org/image/erjvgz9s7/) – Jackie

+0

Im sorry ich nicht machen konnte aus diesen Bildern etwas herausholen. Kannst du versuchen, eine JFiddle zu erstellen? Es wäre einfach, auf diese Weise zu helfen – Umamaheswaran

+0

[jsfiddle] (https://jsfiddle.net/1opcanpg/1/). Es ist das erste Mal, dass ich jsfiddle benutze ... – Jackie