javascript - Comment puis-je transformer une chaîne de HTML en objet DOM dans une extension Firefox?

Translate

Je télécharge une page Web (tag soupe HTML) avec XMLHttpRequest et je veux prendre la sortie et la transformer en un objet DOM sur lequel je peux ensuite exécuter des requêtes XPATH. Comment convertir une chaîne en objet DOM?

Il semble que la solution générale consiste à créer une iframe cachée et à y jeter le contenu de la chaîne. Il y a euparlerde mise à jourDOMParserpour prendre en charge text / html mais à partir de Firefox 3.0.1, vous obtenez toujours unNS_ERROR_NOT_IMPLEMENTEDsi tu essayes.

Existe-t-il une option en plus d'utiliser l'astuce iframe cachée? Et sinon, quelle est la meilleure façon de faire l'astuce iframe pour que votre code fonctionne en dehors du contexte des onglets actuellement ouverts (de sorte que la fermeture des onglets ne gâche pas le code, etc.)

Ceest un exemple de la raison pour laquelle je recherche une solution autre que le hack iframe, si je dois écriretoutce code pour avoir une solution robuste, alors je préfère continuer à chercher autre chose.

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Ajaxian avait en fait unpost sur l'insertion / la récupération de HTML à partir d'un iframeaujourd'hui. Vous pouvez probablement utiliser l'extrait de code js qu'ils y ont publié.

En ce qui concerne la gestion de la fermeture d'un navigateur / onglet, vous pouvez attacher au onbeforeunload (http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx) et faites tout ce que vous devez faire.

La source
Translate

Essaye ça:

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;
    }
}

Remarquez leoverrideMimeTypeetresponseXML.
lereadyState == 4est «terminé».

La source
Translate

Essayez de créer un div

document.createElement( 'div' );

Et puis définissez la balise soupe HTML sur le HTML interne du div. Le navigateur doit traiter cela en XML, que vous pouvez ensuite analyser.

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

La source
Translate

Vous souhaitez donc télécharger une page Web en tant qu'objet XML à l'aide de javascript, mais vous ne souhaitez pas utiliser de page Web? Étant donné que vous n'avez aucun contrôle sur ce que l'utilisateur fera (fermer les onglets ou les fenêtres ou autre), vous devrez le faire comme un widget OSX Dashboard ou une application distincte. Une extension Firefox fonctionnerait également, à moins que vous n'ayez à vous soucier de la fermeture du navigateur par l'utilisateur.

La source
Translate

Existe-t-il une option en plus d'utiliser l'astuce iframe cachée?

Malheureusement, non, pas maintenant. Sinon, le code du micro-résumé vers lequel vous pointez l'utilisera à la place.

Et si ce n'est pas le cas, quelle est la meilleure façon de faire l'astuce iframe pour que votre code fonctionne en dehors du contexte des onglets actuellement ouverts (afin que la fermeture des onglets ne fausse pas le code, etc.)?

Le code que vous avez cité utilise la fenêtre récente du navigateur, la fermeture des onglets n'affectera donc pas l'analyse. La fermeture de cette fenêtre de navigateur annulera votre chargement, mais vous pouvez y faire face (détecter que le chargement est annulé et le redémarrer dans une autre fenêtre par exemple) et cela n'arrive pas très souvent.

Vous avez besoin d'une fenêtre DOM pour que l'iframe fonctionne correctement, il n'y a donc pas de solution propre pour le moment (si vous souhaitez utiliser l'analyseur mozilla).

La source