Comment puis-je activer une chaîne de code HTML à un objet DOM dans une extension de Firefox?

StackOverflow https://stackoverflow.com/questions/3868

  •  08-06-2019
  •  | 
  •  

Question

Je suis le téléchargement d'une page web (la soupe de tags HTML) avec XMLHttpRequest et je veux profiter de la sortie et de le transformer en un objet DOM que j'pouvez ensuite exécuter des requêtes XPATH sur.Comment puis-je convertir une chaîne de caractères en objet DOM?

Il semble que la solution générale est de créer une iframe masqué et de jeter le contenu de la chaîne dans la.Il y a eu parler de la mise à jour DOMParser à l'appui du texte/html mais comme de Firefox 3.0.1 vous obtenez toujours une NS_ERROR_NOT_IMPLEMENTED si vous essayez.

Est-il une option en plus de l'aide de l'iframe masqué truc?Et si non, quelle est la meilleure façon de faire de l'iframe astuce pour que votre code fonctionne en dehors du contexte de toute onglets actuellement ouverts (de sorte que la fermeture des onglets de ne pas bousiller le code, etc)?

Cette est un exemple de pourquoi je suis à la recherche d'une solution autre que de l'iframe hack, si je dois écrire tous qui code pour avoir une solution robuste, alors je préfère le garder à la recherche de quelque chose d'autre.

Était-ce utile?

La solution

Ajaxian effectivement eu un post sur l'insertion / extraction de html à partir d'une iframe aujourd'hui.Vous pouvez probablement utiliser le js extrait qu'ils ont postés.

Comme pour la manipulation de la fermeture d'un navigateur / onglet, vous pouvez joindre à la onbeforeunload (http://msdn.microsoft.com/en-us/library/ms536907(SV.85).aspx) de l'événement et de faire tout ce que vous devez faire.

Autres conseils

Essayez ceci:

var request = new XMLHttpRequest();

request.overrideMimeType( 'text/xml' );
request.onreadystatechange = process;
request.open ( 'GET', url );
request.send( null );

function process() { 
    if ( request.readyState == 4 && request.status == 200 ) {
        var xml = request.responseXML;
    }
}

Avis de la overrideMimeType et responseXML.
L' readyState == 4 est "complet".

Essayez de créer une div

document.createElement( 'div' );

Et puis définissez la soupe de tags HTML dans le innerHTML de la div.Le navigateur doit traiter que dans le XML, que vous pouvez ensuite analyser.

La propriété innerHTML prend une chaîne de caractères qui spécifie une combinaison valide de le texte et les éléments.Lorsque le innerHTML la propriété est définie, la chaîne donnée remplace complètement l'existant contenu de l'objet.Si la chaîne contient des balises HTML, la chaîne est analysé et mis en forme comme il est placé dans le document.

Si vous voulez télécharger une page web comme un objet XML à l'aide de javascript, mais vous ne voulez pas utiliser une page web?Puisque vous n'avez aucun contrôle sur ce que l'utilisateur va faire (fermer des onglets ou fenêtres ou autres joyeusetés), vous devez le faire comme un OSX widget de Dashboard ou certains de demande distinct.Une extension de Firefox serait également le travail, sauf si vous avez à vous soucier de l'utilisateur de la fermeture du navigateur.

Est-il une option en plus de l'aide de l'iframe masqué truc?

Malheureusement, non, pas maintenant.Sinon, le microsummary code vous point à l'utiliser à la place.

Et si non, quelle est la meilleure façon de faire de l'iframe astuce pour que votre code fonctionne en dehors du contexte de toute onglets actuellement ouverts (de sorte que la fermeture des onglets de ne pas bousiller le code, etc)?

Le code que vous avez cité utilise le navigateur récent de la fenêtre, afin de fermer les onglets n'affecte pas l'analyse.La fermeture de cette fenêtre de navigateur s'abandonner à votre charge, mais vous pouvez traiter avec elle (détecter que le chargement est terminé, et de le redémarrer dans une autre fenêtre par exemple) et il n'arrive pas très souvent.

Vous avez besoin d'un DOM fenêtre pour l'iframe pour fonctionner correctement, donc il n'y a pas de solution propre pour le moment (si vous êtes désireux d'utiliser mozilla analyseur).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top