2015-11-11 2 views
0

J'ai essayé de transformer un bookmarklet en un petit environnement de développement que je peux utiliser pour tester javascript et envoyer des commandes facilement à la volée et mettre à jour le code sur mon serveur rapidement pour voir le résultat. Cela a fonctionné à mi-chemin en utilisant la méthode que j'ai trouvée sur ce site et google mais cela ne semble pas très bien fonctionner et parfois ne fonctionne pas au hasard. L'objectif final est d'avoir un bookmarklet sur lequel je peux cliquer depuis n'importe quelle page et il charge un fichier javascript que j'ai enregistré sur mon serveur. J'ai créé les deux bookmarklets suivantes pour essayer d'obtenir ce travail:Impossible de charger le script à partir d'un autre serveur - Problème de stratégie de sécurité du contenu?

Échec Méthode 1:

javascript: 
var s = document.createElement('script'); 
s.type='text/javascript'; 
document.body.appendChild(s); 
s.src='//smewth.com/test.js'; 
void(0); 

Méthode 1 dans une ligne sous forme de bookmarklet: javascript: var s = document.createElement('script'); s.type='text/javascript'; document.body.appendChild(s); s.src='//smewth.com/test.js'; void(0);


méthode a échoué 2:

javascript:(
function(){ 
    var imported = document.createElement('script'); 
    imported.type='text/javascript'; 
    imported.src = 'https://smewth.com/test.js'; 
    document.head.appendChild(imported); 
})(); 

Méthode 2 sous forme de marque-page à une ligne: javascript:(function(){ var imported = document.createElement('script'); imported.type='text/javascript'; imported.src = 'https://smewth.com/test.js'; document.head.appendChild(imported); })();

J'ai obtenu la méthode 1 en décomposant le bookmarklet kickass de (http://kickassapp.com/). Le vrai que j'ai obtenu de leur site fonctionne très bien sur mon navigateur sans aucun problème. J'ai même fait une substitution directe à partir de l'URL qu'ils utilisaient pour charger avec mon URL. La deuxième méthode que j'ai trouvée lors de la recherche sur ce site et cela a effectivement fonctionné pendant un petit moment et a cessé de fonctionner pour une raison inconnue (peut-être différents navigateurs). J'ai essayé d'ajouter cet objet script à la tête et au corps de chacun d'entre eux sans amélioration des résultats.

J'ai créé le script test.js juste pour ce poste et il contient une simple déclaration de message d'alerte:

$$ [/]# cat test.js 
alert("hi"); 
$$ [/]# 

NOTE: Quand je fais cela avec le code intégré dans le bookmarklet lui-même sans annexant à un objet tête/corps, alors il fonctionne très bien comme celui-ci:

javascript:%20alert("hi"); 

J'ai remarqué que, avec ces deux méthodes, le code est réellement obtenir injecté dans la page mais je ne suis pas voir le code est toujours exécuté lorsque Je clique sur le signet. Est-ce que quelqu'un sait quelle méthode est la meilleure ou quelque chose de similaire pour le faire afin que je puisse charger javascript à travers une page que je mets à jour sur un serveur distant (de manière fiable)? Peut-être que je dois attacher le à un objet différent?

Nous vous remercions de votre aide.

-Jeff

MISE À JOUR: Je montre cela fonctionne alors que ce site est chargé mais il ne fonctionne pas lorsque votre sur un site comme google.com. Vous ne savez pas quelle est la différence ou comment y répondre, google.com a aussi une tête et un objet pour le corps. Je montre ce travail dans certains sites et dans certains autres.

+0

Cela peut être dû à la ** Politique de sécurité du contenu **, mais cela n'explique pas pourquoi je peux charger le bookmarklet kickass sur google.com et je ne peux pas charger celui que j'ai fait dessus. – Jeff82

+1

Vous rencontrez une erreur XSS ou une erreur CSP dans le navigateur? Vous voudrez probablement utiliser JSONP pour contourner si c'est XSS. –

+0

Merci pour votre réponse. En fait, je ne montre aucune erreur dans le navigateur. Après avoir cliqué sur le signet, j'indique que les balises