5 votes

Y a-t-il un moyen pour QML de charger des données à l'aide du kit SDK Javascript de Facebook ?

J'essaie de faire interagir QML avec l'API graphique FB en utilisant FB Javascript SDK.

Je charge ce HTML dans un élément WebView :

 html: "<script>console.log(\"This is in WebKit!\"); window.FB.init();</script>"

et j'ai également créé un objet JS Window Object nommé FB à l'intérieur du WebView :

 javaScriptWindowObjects: QtObject {
          WebView.windowObjectName: "FB"
      }

Mais dès que la fonction window.FB.init() est appelée, une erreur se produit :

ReferenceError: Can't find variable: window

Une autre approche que j'utilise est de charger la fonction FB.init() en utilisant Component.onComplete

     function startupFunction() {
         console.log("This call is in QML!");
         FB.init({
                         appId:'XXXXXXXXXXXXX', cookie:true,
                         status:true
                      });
         console.log(FB);
         }
    Component.onCompleted: startupFunction();

Mais j'obtiens l'erreur suivante :

TypeError: Result of expression 'FB.init' [undefined] is not a function

Voici le QML complet :

import QtQuick 1.0
import "fb.js" as FB
import QtWebKit 1.0
Rectangle {
    width: 360
    height: 360
    Text {
        text: "Hello World"
        anchors.centerIn: parent
    }

    MouseArea {
        anchors.fill: parent

    }
    WebView {
         preferredWidth: 490
         preferredHeight: 400
         scale: 0.5
         smooth: false

         javaScriptWindowObjects: QtObject {
                  WebView.windowObjectName: "FB"
              }
         html: "<script>console.log(\"This is in WebKit!\"); window.FB.init();</script>"

         function startupFunction() {
             console.log("This call is in QML!");
             FB.init({
                             appId:'xxxxxxxxxxxx', cookie:true,
                             status:true
                          });
             console.log(FB);
             }
        Component.onCompleted: startupFunction();
     }

}

0voto

Michael Sandino Points 412

Je pense que le problème est que vous ne définissez rien dans votre objet fenêtre, votre QtObject contient juste le windowObjectName mais pas de fonctions ou de variables. windowObjectName n'est en fait que le nom du nouvel objet, qml n'utilise pas l'attribut "fb.js" -importation pour cet objet.

Selon le docs c'est censé ressembler à ça :

WebView {
   javaScriptWindowObjects: QtObject {
     WebView.windowObjectName: "FB"

     // the stuff you want in that window-object goes here:
     function init() {
         console.log("FB.init");
     }
   }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X