10
votes

formulaire post dans iframe sans affecter l'histoire

est-il possible de soumettre un formulaire à l'intérieur d'un iframe sans affecter l'historique du navigateur?

J'ai mis en œuvre l'envoi d'une demande de post de domaine croisée. Il utilise JavaScript pour créer et soumettre un formulaire à l'intérieur d'un iframe. Cela fonctionne, mais chaque demande ajoute un élément à l'historique du navigateur.

Quelqu'un peut-il savoir un moyen de contourner cela? J'ai essayé de créer l'iframe avec innerhtml et créeeelement. Je n'ai vu aucune différence jusqu'à présent.

PS - J'aimerais utiliser XMLHTTTPQUEST ("AJAX"), mais cela ne prend pas en charge l'envoi de données entre les domaines. Et j'aimerais que j'aimerais utiliser chercher au lieu de poster, mais je dois envoyer plus de 2 000 données.

Voici une version de mon code. J'ai essayé de nombreuses variantes et avez la recherche partout, Buti ne semble pas trouver une solution qui n'affecte pas l'histoire du navigateur. Je crois que ce n'est pas possible - quelqu'un peut-il confirmer cela? xxx


6 commentaires

Pourquoi ne pouvez-vous pas simplement utiliser Ajax pour soumettre le formulaire? Cela vous empêcherait de recharger toutes les pages, qui devraient libérer votre histoire. Est-ce que je manque quelque chose?


J'ai besoin de poster des domaines croisés. AJAX (XMLHTTPEQUEST) POST ne prend pas en charge l'envoi de données à un domaine différent de la page d'accueil.


Je pense que vous pouvez en réalité envoyer une demande de post Ajax. Voir ma réponse mise à jour. J'espère que ça vous aide.


Je pense que ce n'est pas possible .. (même si c'était en quelque sorte, cela serait probablement spécifique au navigateur).


Brian avez-vous un dernier exemple du code que vous avez utilisé pour résoudre ce problème que vous pourriez partager? THX


La solution finale était à 1) Insérer un iframe hébergé sur mon domaine 2) Utilisez la fenêtre.Name Hack pour envoyer des données de la page d'hôte (sur un domaine différent) à l'iframe et 3) Envoyer une demande de message Ajax au serveur sur le serveur. mon domaine.


5 Réponses :


3
votes

Vous devriez Utilisez un ajax POST .

Habituellement Seule la méthode GET est utilisée lors de la création d'applications Ajax. Mais il y a plusieurs occasions lorsque la poste est nécessaire lors de la création d'une demande Ajax. Cela pourrait être pour plusieurs raisons. Par exemple, la demande postale est considérée comme plus sécurisée que d'obtenir la demande car la création d'une demande postale est relativement plus difficile que de créer une demande d'obtention.

Les appels AJAX ne sont pas stockés dans l'historique de navigation.


3 commentaires

Liens utiles, vous devriez les suivre, mais pas vraiment beaucoup de description.


@Shhnap: c'était un peu difficile d'amour. Quoi qu'il en soit, a ajouté les informations pertinentes que Brian a besoin.


Ajax Post ne fonctionne pas entre les domaines. La page sera hébergée sur un domaine et enverra des données à une autre. De plus, les données sont supérieures à 2k, alors obtenez-vous ne fonctionnera pas.



-2
votes

Comme fait dans les commentaires, la solution à ce problème consiste à effectuer une demande AJAX de votre serveur au lieu d'essayer de soumettre la page normalement. W3schools a une très bonne introduction à Ajax que vous pouvez trouver ici: http: //www.w3schools. com / ajax / default.asp

Essentiellement, AJAX utilise JavaScript pour envoyer une demande au serveur et affiche la réponse et, car elle se produit à l'aide de PURE JavaScript, la page ne recharge pas et l'historique n'est pas affecté du tout. . Ce qui semble exactement ce que vous voulez.

EDIT: AJAX ne peut pas poster de données.

Je pense réellement que cela peut; Ou au moins, des solutions de contournement vous permettent de poster des données. Voir ici:

http: // www. capitaine.at/howto-ajax-form-post-request.php

Cela semble le faire de manière assez simple. Voir le code en bas de la page. Spécifiquement: xxx


1 commentaires

XMLHTTPQUEST prend en charge la poste, mais cela ne prend pas en charge l'envoi de données entre les domaines.



0
votes

Si votre serveur peut exécuter le code, vous pouvez probablement faire une requête AJAX à une page "proxy" de votre serveur, qui exécutait alors elle-même la demande sur le serveur distant et renvoie les résultats sur votre page.


4 commentaires

Je n'exécute pas le domaine hôte. Je gère le domaine auquel j'ai besoin d'envoyer des données. La page d'hôte comprendra mon code en tant que script tiers. Merci quand même.


Je vois. Une recherche rapide semble indiquer qu'il est possible d'utiliser un proxy flash (voir blog.monstuff.com/ Archives / 000280.html ). Si vous ne voulez pas descendre cet itinéraire, je ne suis pas sûr que si c'est possible.


Le flash est un peu lourd, mais c'est une bonne idée. Je vais certainement considérer cela.


En fait, le poids de Flash n'est pas le problème. La raison pour laquelle je ne peux pas l'utiliser, cela ne fonctionne pas sur l'iPhone.



1
votes

fonctionne-t-il pour utiliser JS pour ajouter un iframe dont SRC est hébergé sur votre site (le domaine auquel le script tiers-hébergé doit envoyer des données?) Cet IFrame pourrait inclure le JavaScript nécessaire pour faire un XMLHTTPRequest à votre / son domaine. Et comme pour obtenir les données réelles à cette iframe à partir du tiers-site - essayez: http://softwareas.com/cross-domain-communication-with-Ilrames . C'est une solution assez intelligente impliquant des identifiants de fragment changeants (#Quelque chose) à la fin de l'URL iFrame, que vous pouvez ensuite lire via JS dans l'iframe.

Aussi une supposition, mais si vous tapez Ce passé SO Solution < / a> à un problème d'historique similaire (à l'aide de l'emplacement.replace) sur ce qui précède, il conviendrait d'espérer faire la partie changeante d'ancrage sans perturber la pile d'histoire.



0
votes

(?) Je ne vois pas une bonne raison que vous utilisez un élément iframe. (Comme il s'agissait d'une question plus ancienne, vous étiez peut-être en train de tester en 1997-Vintage HTML 4. BTW, ignore le "XML" dans le nom de l'objet - c'est un report de l'année 2000 et des versions ultérieures de [x] html - no xml Obligatoire.)

Si vous envoyez la demande HTTP de JavaScript plutôt que des éléments du document, rien ne sera ajouté à l'historique. P>

function httpPost(body) {
  req = new XMLHttpRequest();
  req.open("POST", "/submit-here", true/*async*/);
     // or "http://some-other-domain.com/submit-here"
  req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  req.send(body);
}
window.onload = function() {
   document.getElementById('button').onclick = function() {
      httpPost('x=Some+Value&y=Another+Value&z=' + new Date().getTime());
      // or use a buildQuery function, JQuery formSerialize, etc. to create the body
   }
}


0 commentaires