2009-04-07 5 views
1

Je suis en train d'écrire un jeu en ligne qui consiste à cliquer sur des liens sur différents sites sur Internet. Je sais que cela semble étrange mais la prémisse de base est que vous commencez sur ma page où vous cliquez sur un lien vers une page sur un autre site. Vous continuez à suivre les liens jusqu'à ce que vous arriviez à la page que vous essayez d'atteindre. Pensez à WikipediaGame.org. La différence étant que je n'ai pas de contrôle sur les pages réelles avec les liens. Ce que je dois être en mesure de faire est de suivre tous les liens sur lesquels ils ont cliqué, et quand ils arrivent à la dernière page, je veux les renvoyer à mon site (ou quelque chose dans ce sens). Ce que je pensais était que je pourrais peut-être intercepter les demandes de page et injecter du Javascript pour suivre les liens sur lesquels ils ont cliqué. Est-ce possible? Est-ce que quelqu'un a fait quelque chose comme ça? Évidemment, cela pourrait poser un risque de sécurité. Est-ce que j'ai d'autres options? Je veux éviter que l'utilisateur ne recueille une liste de tous les liens, puis les publie dans une zone de texte sur mon site.Injecter Javascript dans une page

Répondre

0

J'ai donc trouvé quoi faire. J'utilise un iframe comme ceci:

<iframe src="Puzzle/ContinuePuzzle" />

Il souligne la source de mon Mvc Controller. Dans mon contrôleur, je fais un WebRequest pour l'url que je veux et ensuite analyser le code HTML et coller mon propre javascript dans la page. La page agit et ressemble à l'autre site, mais elle provient en réalité de mon site.

1

Peut-être un bookmarklet pour envoyer la page actuelle à votre site? De cette façon, l'utilisateur aurait un contrôle complet sur la liste des liens partagés avec un minimum de travail.

0

Pour rendre ce navigateur compatible avec plusieurs navigateurs - je ne suis pas sûr s'il y a un moyen sans écrire un plugin pour chaque navigateur. Mais, je peux aussi me tromper :-)

Vous pourriez essayer de créer un bookmarklet (Javascript qui s'exécute lorsque l'utilisateur clique sur un signet donné), mais cela ne fonctionnerait pas automatiquement sur toutes les pages que l'utilisateur charge; l'utilisateur devra cliquer dessus pour l'exécuter.

Si vous souhaitez simplement prendre en charge Firefox, vous pouvez écrire un script Greasmonkey qui s'exécutera sur chaque page/site. Mais, cela limiterait la portée de vos utilisateurs.

0

Vous ne pouvez pas faire cela en utilisant javascript seul. Vous devez soit écrire un plugin firefox, soit un script GM.

-1

Je ne sais pas comment vous injecteriez JavaScript dans les pages de quelqu'un d'autre, ce qui vous enverrait des messages. Cela ressemble à quelque chose qu'un virus ferait.

Je pense que vous pourriez accomplir quelque chose comme ce que vous voulez en utilisant un iframe.
Une méthode simple consisterait à inclure un préréglage iframe pour charger l'emplacement «démarrer» sur votre site, puis à inclure un bouton sur la page externe pour que l'utilisateur affiche son emplacement actuel (dans l'iframe).

Lorsque le bouton sur votre page vous pressé pouvez interroger l'état actuel de l'iframe ...
Les références à la fenêtre générée par l'iframe et au document chargé dans l'iframe peuvent être obtenus par les cadres de tableau en utilisant le nom attribut.

window.frames[iframeName] <br/> 
window.frames[iframeName].document <br/> 

La méthode de tableau cadres de référence a un large soutien, même parmi les navigateurs assez vieux, aussi longtemps que vous attachez un attribut de nom à l'iframe. Pour de meilleurs résultats, utilisez à la fois le nom et l'identifiant.

Pour plus d'navigateurs mis à jour, le document à l'intérieur de l'iframe peut également être référencée par des propriétés contentWindow (de victoire IE) et contentDocument (DOM) de l'élément iFrame:

// IE5.5+ windows 
document.getElementById(iframeId).contentWindow 
document.getElementById(iframeId).contentWindow.document 
or, 
// DOM 
document.getElementById(iframeId).contentDocument 

EDIT: Comme le suggèrent les commentaires ci-dessous, il semble que la plupart des navigateurs vous empêchent d'utiliser un iframe de cette façon.Vous pouvez démarrer une fenêtre où vous voulez, mais vous n'êtes pas autorisé à communiquer avec elle si elle n'est pas sur votre même domaine. Je suppose que vous pourriez construire un scenerio "Man in the Middle", où vous passez d'abord tout le trafic à travers votre serveur, mais ce n'est pas très pratique.

Voici un bon exemple de jQuery contrôle d'un iframe

http://wwwendt.de/tech/dynatree/doc/sample-iframe.html

espoir qui aide.

+0

Je ne pense pas que cela soit autorisé. Les navigateurs modernes n'aiment pas les scripts inter-sites – erikkallen

+0

En effet, vous ne pourrez lire l'emplacement ou faire autre chose utile avec le cadre lorsqu'il se trouve sur le même site que la fenêtre parente. – bobince

0

Je ne suis pas sûr que vous pouvez accomplir cela de la façon dont vous envisagez. Sans écrire un plugin de navigateur, je regarderais ce que font des sites comme KeepVid. Ils vous permettent de créer un signet sur votre barre d'outils, et l'URL du signet est la suivante:

javascript: document.location = 'http://keepvid.com/?url=' + escape (window.location);

Cela passe essentiellement l'URL que l'utilisateur est actuellement sur pour keepvid. Si vous utilisez ce concept, vous pouvez faire en sorte que votre utilisateur clique sur le bouton de signet pour vous l'enregistrer et vous pouvez le collecter et le renvoyer à l'endroit où il se trouvait.

Questions connexes