Bien que les scripts inter-sites soient généralement considérés comme négatifs, j'ai rencontré plusieurs situations où cela était nécessaire.Meilleure pratique: Scripts intersites légitimes
Je travaillais récemment dans le cadre d'un système de gestion de contenu très limitatif. J'avais besoin d'inclure du code de base de données dans la page, mais le serveur d'hébergement n'avait rien d'utilisable. J'ai mis en place quelques scripts bare-bones sur mon propre serveur, pensant à l'origine que je pourrais utiliser AJAX pour importer le contenu de mes scripts directement dans le template du CMS (conservant ainsi des images dynamiques, des éléments de menu, CSS, etc.). J'avais tort. En raison des limitations des objets XMLHttpRequest
, il n'est pas possible d'extraire du contenu d'un domaine différent. Donc je pensais iFrame - même si je ne suis pas un fan de cadres, j'ai pensé que je pouvais créer un cadre qui correspondait à la largeur et la hauteur du contenu, de sorte qu'il semble natif. Encore une fois, j'étais bloqué par des «protections» de script inter-site. Bien que je puisse effectivement charger un fichier distant dans le iFrame, je ne pouvais pas exécuter JavaScript pour modifier sa taille sur la page hôte ou dans la page chargée.
Dans ce scénario particulier, je n'étais pas en mesure de pointer un sous-domaine vers mon serveur. Je ne pouvais pas non plus créer un script sur le serveur CMS qui pourrait être un proxy du contenu de mon serveur, donc ma dernière pensée était d'utiliser un JavaScript distant.
Un JavaScript à distance fonctionne. Il se brise lorsque l'utilisateur a JavaScript désactivé, ce qui est un inconvénient; mais ça marche. Le "problème" que j'avais avec l'utilisation d'un JavaScript distant était que je devais utiliser la fonction JS document.write()
pour sortir n'importe quel contenu. Toute sortie qui n'est pas JS provoque des erreurs de script. En plus d'utiliser document.write()
pour chaque ligne, vous devez également vous assurer que le contenu est échappé - sinon vous vous retrouverez avec plus d'erreurs de script.
Ma solution est la suivante:
Mon script a reçu un paramètre GET ("page"), puis regardé le fichier ({$page}.php
), et lire le contenu dans une variable. Cependant, j'ai dû utiliser des techniques de tampon maladroit pour exécuter les scripts inclus (pour des choses comme l'interaction de base de données) puis dépouiller le contenu final de tous les caractères de saut de ligne (\n
), puis échapper tous les caractères requis. Le résultat final est que mon script original (qui génère JavaScript) accède à des scripts apparemment "standard" sur mon serveur et convertit leur sortie standard en JavaScript pour l'afficher dans le modèle CMS.
Bien que cette solution fonctionne, il semble qu'il pourrait y avoir une meilleure façon d'accomplir la même chose. Quelle est la meilleure façon de faire fonctionner les scripts inter-sites spécifiquement dans le but d'inclure du contenu provenant d'un domaine complètement différent?
Voulez-vous s'il vous plaît préciser # 2? Pour le type de données 'html', comme dans load(), jQuery utilise XMLHttpRequest, qui ne fonctionne pas entre sites. En outre, load() supprime les balises de script. –
Désolé, ce que je voulais dire pour # 2 utilise JSONP http://docs.jquery.com/Release:jQuery_1.2/Ajax#Cross-Domain_getJSON_.28using_JSONP.29 –