Есть ли способ, с помощью которого QML может загружать данные с помощью Facebook Javascript SDK? - PullRequest
5 голосов
/ 17 августа 2011

Я пытаюсь заставить QML взаимодействовать с API-интерфейсом FB-графа с помощью FB Javascript SDK.

Я загружаю этот HTML-код внутри элемента WebView:

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

итакже создал JS Window Object с именем FB внутри WebView:

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

Но как только вызывается window.FB.init (), он выдает ошибку:

ReferenceError: Can't find variable: window

Другой подход, который я использую, это загрузить функцию FB.init (), используя 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();

Но я получаю сообщение об ошибке:

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

Вот полный QML:

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();
     }

}

1 Ответ

0 голосов
/ 14 сентября 2011

Я думаю, проблема в том, что вы ничего не определяете в своем объекте окна, ваш QtObject просто содержит windowObjectName, но не имеет функций или переменных.windowObjectName - это просто имя для нового объекта, qml не использует "fb.js" -импорт для этого объекта.

Согласно документам это должно выглядеть так:

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

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