IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Extension Safari
Options
Slumb
posté 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
Go to the top of the page
 
+Quote Post
yponomeute
posté 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
Go to the top of the page
 
+Quote Post
Slumb
posté 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
Go to the top of the page
 
+Quote Post
Slumb
posté 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
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 19th April 2024 - 19:14