2017-04-27 1 views
0

JavaScript ne peut pas obtenir le code source d'une page arbitraire, la dernière fois que je le savais. Mais PHP peut très facilement.Obtenir la source d'une page avec PHP, manipuler avec JavaScript

//get page source code with php 
<?php 

url = 'http://www.thesaurus.com/browse/strong?s=t'; 
$src = file_get_contents($url); 

?> 

PHP n'est pas bon pour manipuler le DOM, mais jQuery est parfait pour ça!

Je voudrais faire quelque chose comme

//manipulate source code with javascript 
<script> 
html = '"' + <?php echo $src;?> + '"'; 
listItems = $(html + " li"); 
printLists = ''; 
$.each(listItems, function(ind, el) { 
    printLists += el.innerHTML + "<br/>"; 
}); 

document.write(printLists); 

</script> 

Mais, chaque fois que je fais l'écho $src dans la balise script, il est interprété comme HTML immédiatement et la page devient une moquerie en direct du site réel.

//Actually just shows me [email protected] 
<body> 
    <div id="holder" style="display: none;"></div> 

<script> 
    holder = $("#holder"); 
    nodeNames = []; 
    html = $.parseHTML(<?php echo $src;?>, holder, false); 
</script> 
</body> 

L'expression « DOM virtuel » sonne juste, mais je ne veux vraiment pas du code source copié pour afficher du tout. Je veux juste en extraire certaines parties: pour lancer un script à partir de la console, rechercher un terme sur quelques sites de thésaurus, prendre les résultats et les enregistrer dans JSON accessible par un script de thésaurus local.

J'ai une bonne idée de comment faire tout le reste, ne m'attendais pas à ce que ce soit la partie difficile!

Des suggestions pour empêcher le navigateur d'analyser le code HTML?

(je préférerais cela à courir comme un fichier script sans un navigateur de toute façon, mais avait des difficultés à charger jQuery dans un fichier thesaurus.js.)

Répondre

0

Vous pouvez exécuter un script php pour obtenir le contenu du fichier et l'écho des résultats à une zone de texte avec readonly/disabled on, puis interrogez ce fichier php via ajax pour afficher la zone de texte résultante sur la page.

Par exemple, output.php:

<?php 
    $str = '<p>I am a paragraph.</p>'; 
    echo '<textarea readonly="readonly">'.$str.'</textarea>'; 
?> 

appel AJAX dans le fichier d'origine:

$.ajax({url: 'output.php', success: function(data) { $('#result').html(data); }});