2010-09-08 9 views
0

J'essaie de charger this remote debugging solution pour déboguer/interagir avec DOM/js live. Les instructions vous demandent de mettre un bloc script et un lien script dans le HEAD de la page pour que tout fonctionne. C'est très bien. C'est un excellent outil. Mais que se passe-t-il si je veux une manière de "l'insérer" dans n'importe quelle page. Je ne vois pas pourquoi cela ne peut pas être fait.Comment puis-je charger un fichier javascript en utilisant un bookmarklet qui à son tour ne redirige/réécrit pas la page?

Ceci est mon bookmarklet:

javascript:(function(){document.body.appendChild(document.createElement('script')).src='http://url-to-js-file.js?x='+(Math.random());})(); 

Et puis "url-to-js-file.js" charge les js pour iphonedebug:

ipdConfig = { 
    baseUrl: '/ipd/', // trailing slash! 
    consoleBaseUrl: 'http://192.168.1.25:8170/' // trailing slash! 
} 

document.body.appendChild(document.createElement('script')).src='http://192.168.1.25/ipd/ipd.js'; 

console.log('fin.'); 

Notez que la propriété src il y avait à l'origine "/ipd/ipd.js" comme les instructions le suggèrent. Mais il faudra que ce soit absolu comme ça si je veux que le débogueur travaille avec d'autres sites.

Mon problème est que ce code videra le premier fichier js (url-à-js file.js) dans la page ok mais quand le premier fichier tente d'insérer les autres fichiers successifs ma page semble rediriger . En fait, il ne redirige pas mais juste réécrit. Firebug montre la page résultante en tant que corps, mais seulement les fichiers ipd js dans l'élément HEAD.

Pourquoi fait-il cela?

Est-ce à cause du bookmarklet behavior qui normalement redirige vers une nouvelle page? Je ne pense pas. Parce que j'utilise une fermeture dans le lien bookmarklet. Et quand je commente la ligne document.body... du fichier "url-to-js-file.js" la page reste où elle est. Est-ce la nidification? Ou peut-il être quelque chose dans les autres fichiers ipd js provoquant cela?

J'ai essayé de mettre mon code "url-to-js-file.js" dans une fermeture, mais alors la variable globale ipdConfig devient invisible pour le reste du code ipd qui le casse.

Des idées?

Répondre

1

Ma meilleure estimation est que le fichier ipd.js utilise document.write() quelque part dans son code. Dans ce cas, vous devez modifier ipd.js afin qu'il ne le fasse pas.

Comme je l'ai soupçonnais, ipd.js est écrit par un débutant javascript:

document.write('<script src="' + ipdConfig.baseUrl + '_ipd.js"></script>'); 

Modifier à utiliser appendChild(createElement(...)) à la place.

+0

bien. Je vais essayer et voir ce qui se passe. Qu'y a-t-il à propos de "document.write'"? –

+1

'document.write()' a deux comportements. Si la page n'a pas fini de se charger, elle ajoute tout ce qui est écrit sur la page. Mais si la page a fini de charger (comme c'est dans votre cas), elle remplace TOUS LES CONTENUS DE LA PAGE. – slebetman

+0

Pas 100% que c'était la solution mais cela semble le plus logique. –