Quantcast
Channel: Jobs
Viewing all articles
Browse latest Browse all 18427

QWebView Javascript to Flash SWF not working

$
0
0
PACCPL-334LAGYA:flash jbarne200$ cat SwfTest.as package {       import flash.events.*;     import flash.external.*;     import flash.display.*;       public class SwfTest extends Sprite {           public function SwfTest():void {             ExternalInterface.marshallExceptions = true;             try {                 ExternalInterface.addCallback("createFunction", create);                 ExternalInterface.addCallback("greetFunction", greet);             } catch (error:Error) {                 trace("error creating callback functions");             }         }           public function create():void {             ExternalInterface.call("receiver.onLog", "createFunction called in actionscript");             ExternalInterface.call("receiver.onCreated");         }           public function greet(name:String):void {             ExternalInterface.call("receiver.onGreeting", "Hello "+name);         }     } } I made an html page with the correct object/embed tags that also has javascript with the receiver object defined as having methods per the ExternalInterface.call() functions in actionscript (onLog(), onCreate(), onGreeting()). If I open the page in Firefox, it behaves as expected. So far so good… PACCPL-334LAGYA:qtswftest jbarne200$ cat main.cpp #include <QtGui/QApplication> #include "mainwindow.h"   int main(int argc, char *argv[]) {     QApplication a(argc, argv);     MainWindow w;     w.show();     return a.exec(); } PACCPL-334LAGYA:qtswftest jbarne200$ cat mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H   #include <QtGui/QMainWindow> #include <QtWebKit/QWebView> #include <QtWebKit/QWebFrame> #include <QDebug>   class JavaScriptObject : public QObject {     Q_OBJECT   public:     JavaScriptObject()     {}   public slots:     void onCreated() {         qDebug() << "onCreated called";     }       void onGreeting(QString msg) {         qDebug() << "Greeting: " << msg;     }       void onLog(QString msg) {         qDebug() << "Log: " << msg;     }   };     class WebView : public QWebView {     Q_OBJECT   public:     WebView(QWidget *parent)         :   QWebView(parent)         ,   m_jsObject(new JavaScriptObject)         ,   exampleSwf("document.getElementById('swf')")     {         QObject::connect(page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), SLOT(bindJavaScriptObject()));         QObject::connect(this, SIGNAL(loadFinished(bool)), SLOT(onLoadFinished(bool)));         QObject::connect(this, SIGNAL(swfReady()), SLOT(onSwfReady()));     }     ~WebView() {         delete m_jsObject;     }       void init() {         settings()->setAttribute(QWebSettings::JavascriptEnabled, true);         settings()->setAttribute(QWebSettings::PluginsEnabled, true);         QString url = "file:///mnt/nfs/env/swf.html";         load(QUrl(url));     }       void callActionScriptMethod(QString method) {         QString call = exampleSwf + "." + method + "()";         qDebug() << call;         QVariant var = page()->mainFrame()->evaluateJavaScript(call);         qDebug() << "value returned from method call is " << var.toString();     }       void callActionScriptMethod(QString method, QString params) {         QString call = exampleSwf+"."+method+"("+params+")";         qDebug() << call;         QVariant var = page()->mainFrame()->evaluateJavaScript(call);         qDebug() << "value returned from callActionScript is " << var.toString();     }   public slots:     void bindJavaScriptObject() {         page()->mainFrame()->addToJavaScriptWindowObject("receiver", m_jsObject);         qDebug() << "bindJavaScriptObject";         QString html = page()->mainFrame()->toHtml();         qDebug() << "html of page is \n" << html;         emit swfReady();     }       void onLoadFinished(bool ok) {         qDebug() << "load finished: ok = " << ok;     }       void onSwfReady() {         qDebug() << "onSwfReady()";         callActionScriptMethod("createFunction");         callActionScriptMethod("greetFunction", "\"Jeff\"");     }   signals:     void swfReady();   private:     JavaScriptObject *m_jsObject;     QString exampleSwf;     };   class MainWindow : public QMainWindow {     Q_OBJECT   public:     MainWindow(QWidget *parent = 0)         :   QMainWindow(parent)         ,   webView(new WebView(this))     {         webView->init();     }     ~MainWindow() {} private:     WebView *webView; };   #endif // MAINWINDOW_H PACCPL-334LAGYA:qtswftest jbarne200$ cat qtswftest.pro # ------------------------------------------------- # Project created by QtCreator 2013-04-01T09:47:47 # ------------------------------------------------- QT += webkit gui TARGET = qtswftest TEMPLATE = app SOURCES += main.cpp HEADERS += mainwindow.h I stripped out the javascript from the swftest.html and saved it to swf.html (per the url in WebView::init()). None of the evaluateJavaScript() calls worked. It seems as though the swf was never loaded? The html was loaded. The browser version of the html works (where the javascript receiver object is embedded in the page). Is there a way to tell when a swf gets loaded into webkit? I’m stumped.

Viewing all articles
Browse latest Browse all 18427

Trending Articles