2010-12-01 21 views
2

Je travaille sur une barre latérale de Firefox qui charge une page Web dans le document principal. Maintenant, je voudrais appeler une fonction javascript à partir du document principal en réponse à un bouton poussé sur la barre latérale. Comment la barre latérale peut-elle obliger le document principal à exécuter une de ses fonctions javascript? Jusqu'à présent, j'ai une variable contenant le code javascript, mais comment peut-elle être exécutée? (Dans le contexte du site chargé?)Comment autoriser une barre latérale à exécuter du code javascript à partir du document principal?

Répondre

7

Dr.Molle est correct avec sa réponse mais j'aime toujours travailler des exemples.

console.log("Opening new page at http://example.com"); 
page = window.open('http://example.com'); 
console.log(page); 
console.log("calling alert on opened page"); 
page.alert("I opened and the previous windows JS called me!!!!"); 
console.log("called alert"); 

Exemple de page => [Supprimé. Voir mise à jour ci-dessous]

Résultats:

alert initiated from other page console logs

Note: je devais permettre popups pour le code de démonstration pour travailler, mais cela est une autre question pour une autre question SO. ;)

firefox popup blocked notice

MISE À JOUR:

Ce faisant

page.alert() 

travaillé parce qu'il n'a pas eu à attendre la page pour terminer le chargement pour que cela fonctionne. Afin d'être en mesure d'appeler une fonction est un script sur la page chargée, vous devez vous assurer que le script a terminé le chargement. Pour illustrer cela, j'ai changé mon exemple.

Exemple page =>http://mikegrace.s3.amazonaws.com/forums/stack-overflow/example-call-function-in-opened-page.html

La JS ressemble à ceci

page = window.open('http://mikegrace.s3.amazonaws.com/forums/stack-overflow/example-the-other-page.html'); 

var initOtherPage = function() { 
    try { 
    page.showMeTheMoney(); 
    console.log("It worked!"); 
    } catch (e) { 
    console.log("failed to call function on other page because: "+e); 
    setTimeout(function() { 
     console.log("trying again") 
     initOtherPage(); 
    }, 1000); 
    } 
} 
initOtherPage(); 

Sortie de la console

alt text

page Ouvert

alt text

+0

Merci beaucoup, page.alert() fonctionne, mais comment peut-on appeler une fonction dans un script externe? Par exemple: Le script externe est inclus par: othercript.js contient une fonction que j'aimerais appeler. Comment une fonction dans otherscript.js peut-elle être référencée/appelée? (typeof mainWindow [nom_fonction] renvoie "non défini" dans ce cas). – Nanadada

+0

@Nanadada, intéressant. Pas certain de pourquoi. Je vais devoir vérifier ça. Merci de vérifier cela. –

3

Chargez la page en utilisant window.open() et l'enregistrer dans une variable:

page=window.open('some.htm') 

alors vous pouvez accéder à la fenêtre en utilisant cette variable et appeler des fonctions à l'intérieur :

page.someFunction() 
+0

C'est trop cool! Je ne savais pas que tu pouvais faire ça. :) Merci! –

+0

Merci beaucoup! – Nanadada