Extension Safari |
Bienvenue invité ( Connexion | Inscription )
Extension Safari |
20 Jun 2014, 23:36
Message
#1
|
|
Macbidouilleur d'argent ! Groupe : Membres Messages : 782 Inscrit : 11 Sep 2005 Membre no 45 692 |
Bonsoir,
Je suis en train de développer une extension pour Safari, en fait elle est pratiquement terminée mais il ne me manque plus qu'a partager des données entre ma page globale.html (et donc page globale de l'extension où est le "coeur" du JS) et une autre page utilisée pour la toolbar. J'ai essayé tout un tas de truc comme : Code safari.self.tab.dispatchMessage('message', 'datas'); et de l'autre côté un : Code safari.self.tab.addEventListener('message', callback, false); mais impossible de communiquer de l'un a l'autre. Quelqu'un aurait-il une idée ? Merci à vous. -------------------- iMac 27" - MBP 15"
PC ASUS Z97 WIFI + Bluetooth - Intel Core i7-4790K CPU 4,00GHz - GeForce 980 GTX ZOTAC 4Go - 16Go RAM - SSD Crucial Bluetooth Device (Personal Area Network) Bluetooth Device (RFCOMM Protocol TDI) Carte réseau Broadcom 802.11ac Intel Ethernet Connection I218-V |
|
|
21 Jun 2014, 08:44
Message
#2
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 4 969 Inscrit : 26 Jan 2011 Lieu : Pollachius virens Membre no 164 083 |
La toolbar ça serait pas plutôt au niveau de l'application qu'il faut récupérer le message ?
Code safari.application.addEventListener("message", waitForMessage, false); -------------------- MBP 2017 15" avec clavier pourri et touchbar inutile
|
|
|
21 Jun 2014, 08:51
Message
#3
|
|
Macbidouilleur d'argent ! Groupe : Membres Messages : 782 Inscrit : 11 Sep 2005 Membre no 45 692 |
Je n'ai mis ici qu'un de mes innombrables essais (je peux te dire que j'en ai fais beaucoup) et celui-ci n'y a pas échappé. Si cette instruction est correcte, alors que dois-je mettre du côté global ? (dispatchMessage)
Sinon peut-être du côté Safari.extension ? (il y a des globalPage, tabs, etc. mais j'ai des erreurs quand je l'utilise). Merci. EDIT : voici mon code JS (je l'ai réduit au minimum pour me concentrer sur ce problème) global.html : Code <script type="text/javascript"> alert('global'); function respondToMessage(message) { alert('respondToMessage'); } safari.application.dispatchMessage('message', 'string'); </script> Mon alerte global s'affiche bien une fois. Ma page tab-1.html : Code <script type="text/javascript"> alert('1'); function waitForMessage(msgEvent) { if(msgEvent.name == "message") { alert('ici'); } } safari.application.addEventListener('message', waitForMessage, false); </script> Mon alerte '1' s'affiche aussi correctement et autant de fois que j'ai de fenêtre ouverte. Par contre, le 'ici', rien... Ce message a été modifié par Slumb - 22 Jun 2014, 21:03. -------------------- iMac 27" - MBP 15"
PC ASUS Z97 WIFI + Bluetooth - Intel Core i7-4790K CPU 4,00GHz - GeForce 980 GTX ZOTAC 4Go - 16Go RAM - SSD Crucial Bluetooth Device (Personal Area Network) Bluetooth Device (RFCOMM Protocol TDI) Carte réseau Broadcom 802.11ac Intel Ethernet Connection I218-V |
|
|
23 Jun 2014, 07:38
Message
#4
|
|
Macbidouilleur d'argent ! Groupe : Membres Messages : 782 Inscrit : 11 Sep 2005 Membre no 45 692 |
Bon, j'ai trouvé un autre moyen, sur cette page : https://developer.apple.com/library/safari/...009977-CH16-SW2
Dans le code suivant (copier/coller de la page citée ci-dessus) : Code const myBars = safari.extension.bars; function updateAllBars { for (var i = 0; i < myBars.length; ++i) { var barWindow = myBars[i].contentWindow; barWindow.doSomething(); var myWindow = safari.application.activeBrowserWindow; if (myBars[i].browserWindow == myWindow) { barWindow.doSomethingSpecial(); } } } A part, au moins une erreur grossière (manque les parenthèses a la fonction), on dirait que cela fonctionne un peu quand ça veut. Voici ce code adapté à mon besoin : Code function updateAllBars(message) { for (var i = 0; i < safari.extension.bars.length; ++i) { var barWindow = safari.extension.bars[i].contentWindow; //barWindow.updateBar(message); barWindow.monToto(); } } A l'utilisation de mon code, j'ai cette erreur : TypeError: 'undefined' is not a function (evaluating 'barWindow.monToto()') Je dis qu'il fonctionne quand il veut car via Extension Buidler, quand j'installe l'extension, ça marche un coup sur 5. Sans rien changer (je viens encore de faire l'essai, j'ajoute l'extension, oh surprise ça marche. Je quitte Safari, je relance, rien. Je recharge a nouveau, rie. J'inspecte a nouveau ma page globale : erreur...). Si vous avez une idée... EDIT : pour info, j'ai oublié de le mettre avec mon code déjà présent, la fonction dans l'autre fichier que j'appelle (fichier qui est indiqué dans Extension Builder) : Code <script type="text/javascript"> function monToto() { alert('toto'); } </script> J'ai aussi essayé : Code var monToto = function() { alert('toto'); } Merci pour votre aide, précieuse... Ce message a été modifié par Slumb - 28 Jun 2014, 16:36. -------------------- iMac 27" - MBP 15"
PC ASUS Z97 WIFI + Bluetooth - Intel Core i7-4790K CPU 4,00GHz - GeForce 980 GTX ZOTAC 4Go - 16Go RAM - SSD Crucial Bluetooth Device (Personal Area Network) Bluetooth Device (RFCOMM Protocol TDI) Carte réseau Broadcom 802.11ac Intel Ethernet Connection I218-V |
|
|
Nous sommes le : 19th April 2024 - 19:14 |