1

Existe-t-il un moyen d'obtenir l'extension chromatique du fichier JS distant?Utilisation de JavaScript à distance dans les extensions Chrome

Mon manifest.json ressemble à ceci:

{ 
    "name": "My Extension", 
    "version": "0.1", 
    "content_scripts": [ 
    { 
     "matches": ["http://*/*"], 
     "js": ["jquery.js", "main.js"], 
     "run_at": "document_end", 
     "all_frames": true 
    } 
    ] 
} 

Je veux utiliser une API JavaScript, qui est limitée par l'utilisation sur le domaine choisi, donc je ne peux pas insérer simplement à la page chargée dans Chrome comme ceci:

$('head').append('<script src="http://example.com/myApi.js?key=%key%"></script>'); 

car l'API JS me alertés, que je l'utilise sur l'URL, que je ne les ai pas donné.

Je veux juste utiliser certaines fonctions de ce JS distant. La clé de l'API peut être heureusement enregistrée et utilisée sur localhost.

Mais je n'ai aucune idée, comment résoudre ce problème - où mettre le fichier JS distant pour pouvoir l'utiliser.

J'ai une idée pour créer un "virtual DOM", mais ce n'est peut-être pas une solution, car le code de l'API JS ne peut pas être exécuté.

Où insérer le code? Une page d'arrière-plan ??

+0

Peut-être une solution serait d'insérer un iframe de ma page (hébergé quelque part sur mon domaine et enregistré dans l'API) et d'appeler des fonctions JS d'ici? Cette solution pourrait fonctionner, mais elle n'aime pas la dépendance de la disponibilité de mon domaine/serveur. Je voudrais exécuter le code dans un certain "bac à sable" dans Chrome (dans l'affichage de l'API - sur localhost). –

+0

Il semble que vous deviez simplement visiter 'http: //example.com/myApi.js? Key =% key%' dans le navigateur, enregistrer le fichier, l'appeler 'external.js', et le mettre dans le même Placez-y 'jquery.js' et' main.js' (ajoutez-le aussi au manifeste comme ceci: '[" jquery.js "," main.js "," external.js "]'). – Adam

Répondre

0

Essayez ce script:

if(window.top == window && !document.getElementById('molseek')) 
{ 
    if (document && document.doctype && document.doctype.name && document.doctype.name.toLowerCase() == 'html') { 
     loadToolTip(); 
    } 
    // Weird guest... but if we got an head element, try to validate even if no doctype... 
    else if (document && document.getElementsByTagName('head').length) { 
     loadToolTip(); 
    } 
    // Weird guest #2... but if we got title element, try to validate even if no doctype nor head... 
    else if (document && document.getElementsByTagName('title').length) { 
     loadToolTip(); 
    } 
} 

function loadToolTip(){ 

    (function(s){ 
     if(!window.molseek){ 
      s.src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'; 
      (document.getElementsByTagName("head").item(0)||document.body).appendChild(s) 
     } 
    })(document.createElement('script')); 
    (function(s){ 
     if(!window.apture){ 
      s.src='https://location'; 
      (document.getElementsByTagName("head").item(0)||document.body).appendChild(s) 
     } 
    })(document.createElement('script')); 

} 
3

Avez-vous essayé:

var script = document.createElement('script'); 
script.type = 'text/javascript'; 
script.src = 'http://example.com/myApi.js?key=%key%'; 
document.getElementsByTagName('head')[0].appendChild(script); 

Je l'utilise dans mon extension Google Chrome et fonctionne très bien.

+0

Je n'arrivais pas à faire marcher ça, je l'utilise dans une page background.html, pas une popup, ça pourrait être pourquoi? –

+1

Quelle est la clé ici? – Pradeep

0

Actuellement, impossible de trouver un moyen d'accéder au code hôte d'une extension à distance, tout en autorisant ce code à utiliser les appels chrome * .javascript.

Questions connexes