برمجة QT: كيفية تمديد javaScript API في WebKit
-
27-09-2019 - |
سؤال
أنا جديد على QT وما أحاول فعله هو:
- إنشاء تطبيق Linux باستخدام إطار QT.
- يعرض هذا التطبيق بعض صفحات الويب من الإنترنت.
- أريد تمديد واجهة برمجة تطبيقات JavaScript للوصول إلى بعض البيانات القائمة على الأجهزة والجهاز ، مما يعني أنه يمكن التحكم في بعض الأجهزة باستخدام JavaScript في WebKit.
ولكن كيف يمكنني إضافة بعض الوظائف/الفئات المخصصة إلى WebKit في QT؟
المحلول
لحسن الحظ ، هناك بعض الوثائق حول هذا ، أخيرًا: http://doc.qt.io/qt-4.8/qtwebkit-bridge.html
نصائح أخرى
لقد قمت بمشروع QWebKit الذي قمت بتجديد جسر بين JavaScript ورمز C ++ الخاص بي.
لتحقيق ذلك ، استخدمت الطريقة:
this->page()->mainFrame()->addToJavaScriptWindowObject( "god", this );
يتيح لك ذلك تنفيذ طرق الكائن الذي تمريره إلى AddToJaVaScriptWindowObject كمعلمة ثانية من JavaScript ، باستخدام الكائن المحدد كمعلمة أولى.
مثال هنا:
class Browser : public QWebView
{
Q_OBJECT
public:
Browser( QWidget* parent=0 )
{
connect( this->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(onJavaScriptWindowObjectCleared()) );
}
public slots:
void onJavaScriptWindowObjectCleared()
{
// QString script = "console.log('init!');";
// this->page()->mainFrame()->evaluateJavaScript( script );
}
void onChange()
{
qDebug() << "Browser::onChange()";
}
}
ثم ، من JavaScript يمكنني القيام به:
$('input:text').keydown( god.onChange );
لذلك في كل مرة أضغط فيها على مفتاح في مربع إدخال ، يتم تنفيذ God.Onchange () الذي ينفذ المتصفح :: onchange () فتحة.
بهذه الطريقة تجنب تمديد API JS.
لا تنتمي إلى StackOverflow