QML是否可以使用Facebook Javascript SDK加载数据?

时间:2011-08-17 19:05:15

标签: facebook qt facebook-graph-api qml facebook-javascript-sdk

我正在尝试让QML使用FB Javascript SDK与FB图形API进行交互。

我正在将此HTML加载到WebView元素中:

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

我还在WebView中创建了一个名为FB的JS窗口对象:

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

但是一旦调用了window.FB.init(),它就会抛出一个错误:

ReferenceError: Can't find variable: window

我正在使用的另一种方法是使用Component.onComplete

加载FB.init()函数
     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 :(得分:0)

我认为问题在于您没有在窗口对象中定义任何内容,QtObject只包含windowObjectName但没有函数或变量。 windowObjectName实际上只是新对象的名称,qml不使用"fb.js" - 导入该对象。

根据docs它应该看起来像这样:

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

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