2010-08-16 5 views
1

J'avais l'habitude de mettre en œuvre ce titre ci-dessus en utilisant iframe mais maintenant je ne veux plus l'utiliser J'ai quelques plans dans mon esprit J'ai besoin de les implémenter par ouvrir une page externe dans notre page asp.net sans utiliser d'iframe Je n'ai qu'une simple page aspx avec div tage et panel et quelques autres composants côté serveur, je veux juste savoir comment je peux le faire sans iframe? Je ne veux pas concevoir un nouveau contrôle complexe mais je cherche des méthodes qui peuvent le faire pour moi. Je dois mentionner que j'ai besoin de contrôler la zone qui est chargée par un site externe comme iframe mais la différence est que iframe ne peut pas gérer par ajax même si vous mettez iframe dans le panneau de mise à jour votre page a rafraichissement et postback alors que vous changez la valeur de src par programmation (dans le code C#), nous devons donc concevoir d'autres méthodes quelle est la solution?Ouverture d'une page externe à l'intérieur de notre page

Je pensais que je peux faire une requête obtenir un certain HTML et montrer en div mais je ne pouvais pas l'implémenter.

+2

* Sidenote/Remarque (pas d'insulte): * S'il vous plaît ne le faire avec vos propres pages ou pages que vous avez la permission explicite de le faire. Sinon, cela pourrait être interprété comme une violation du droit d'auteur (ou quelque chose de similaire, en plus de ne pas être gentil) et vous aurez quelques problèmes. – Bobby

+1

Gardez à l'esprit qu'une fois que vous aurez réussi à récupérer ce code HTML et à l'insérer dans un div, le contenu étranger sera affecté par le CSS de votre site. Et vous devrez réécrire toutes les URL non complètes (y compris javascript/css en ligne) pour revenir au serveur d'origine. Sans beaucoup de préparation, il est peu probable que le nouveau contenu ressemble à quelque chose sur le site d'origine, à moins qu'il ne soit très basique sans rien de modérément «fantaisiste» en termes de style/mise en page. Avec un iframe, c'est un document complètement séparé dans votre page et il n'y a aucun de ces soucis. –

+0

il n'y a pas de pages de sécurité dans mon hôte mais externe je veux dire dans l'autre endroit – kamiar3001

Répondre

4

Vous pouvez

  1. Faire un WebRequest sur le côté serveur, puis définissez le texte du div HTML retourné
  2. Vous pouvez faire un iFrame invisible pour faire la demande et ensuite utiliser JavaScript pour saisir le code HTML de l'iFrame et le mettre dans un DIV. (EDIT: commentaire suggère que cela ne fonctionnera pas)

Vous ne pouvez généralement pas faire des appels (comme XmlHttpRequest) à des sites Web externes en raison de problèmes de script intersite.

+0

iirc, saisissant HTML externe chargé, ne provenant pas du même domaine, que ce soit dans un iframe ou non, ne sera pas honoré par le navigateur, résultant en chaîne vide. – Abel

+0

item 1 vous l'avez dit c'est tellement sympa mais est-ce que cela diminue ma vitesse et performance puis-je charger la page comme charger webcontrol dans panel ou div dans mon code C#? – kamiar3001

+0

Vous ne pouvez pas vraiment contourner les scripts inter-site, sauf si vous utilisez un iframe ou faites la demande sur le serveur. Quel est le problème avec l'utilisation d'un iframe de la manière normale - c'est ce à quoi il a été conçu. –

0

Votre demande directe, "ouvrir une page externe à l'intérieur de notre page asp.net sans utiliser d'iframe" n'est pas possible, de par sa conception.

Vous mentionnez AJAX. Vous pouvez utiliser AJAX pour charger votre page, supprimer les en-têtes (ou faire ce côté serveur) et remplacer la balise <body> par une balise <div> (ou faire ce côté serveur aussi). De cette façon, vous pouvez placer le contenu de votre page où vous voulez. Comme un conteneur, je vous suggère d'utiliser un élément de niveau bloc, un <div> suffirait.

Le seul problème (!) Ici est: les requêtes inter-sites comme celle-ci ne sont pas respectées par les navigateurs. Vous pouvez résoudre ce côté serveur en chargeant la page d'ailleurs en utilisant WebRequest ou des moyens similaires.

-1

rien ne peut remplacer un iframe dans votre situation. vous ne serez pas en mesure de faire des demandes ajax à l'autre site en raison de problèmes de sécurité. Vous pouvez extraire le contenu d'un côté de serveur de page et le rendre au client, mais aucune des fonctionnalités ne sera incluse, puisque le contenu est maintenant exécuté dans le contexte de votre propre site.

+0

vous avez complètement tort parce que si vous avez vu le site gmail avant de pouvoir voir exactement ce que je veux – kamiar3001

+0

@ kamiar3001: gmail utilise une technique différente pour éviter les problèmes inter-sites, à savoir: le chargement par le même origine de domaine. Cette méthode s'appelle "proxying" et fonctionne plutôt bien, cependant certaines fonctionnalités sur la page ne fonctionneront pas toujours comme prévu (même pas sur gmail). – Abel

+0

mais vous ne mentionnez pas quelle technique fait et pourquoi fonctionne plutôt bien comment je peux mettre en œuvre avec ces outils que j'ai je pense que nous pouvons – kamiar3001

0

Dépend de l'endroit où vous souhaitez fusionner les données. Si vous souhaitez fusionner les données sur le navigateur client, votre seule autre option en dehors des cadres est d'utiliser Javascript/Ajax.

Vous pouvez faire un jQuery.ajax() à la page charge et utiliser la méthode html() sur un div pour le remplir avec le résultat textuel de cet appel AJAX. Essayez d'utiliser le moins possible la hiérarchie de contrôle et le cycle de vie WebForms. Il semble que votre problème peut être résolu avec AJAX si cela ne vous dérange pas la deuxième requête sur le chargement de la page.

Si vous souhaitez fusionner le contenu du côté serveur (rarement le droit chose à faire), vous pouvez utiliser System.Net.HttpWebRequest pour obtenir et fusionner les données avant de le retourner au navigateur.

Questions connexes