Bir C++ nesnesi/işlevi QtWebKit tarayıcısının içinde QtWebKit tarayıcısında çalışan JavaScript'e göstermenin herhangi bir yolu var mı? Adobe AIR'de ActionScript nesnelerini WebKit tarayıcısının içinde çalışan JS koduna maruz bırakmak mümkündür - Qt'de benzer işlevleri arıyorum.Q ++ nesnesinde Javascript'e Expose C++ nesnesi 0t
cevap
Evet. this.'a bir göz atın. İyi bir başlangıç olmalı.
DÜZENLEME: LİNK ÇALIŞIYOR, AMA SADECE HALİNDE LİNK
bir soru ben #qt ve qt-ilgidir birkaç kez gelip görüldü ettik ... Richard Moore tarafından TEKRAR [Link] KIRIYOR , varsayılan olarak QtWebKit'te bulunanlara özel (uygulamaya özgü) API'ler ekleme. Bu aslında oldukça kolay (bir kez nasıl olduğunu bilirsiniz) aşağıda göstereceğim gibi. Bu gönderi, nesne üzerinde arama yöntemleri ve C++ 'dan değerlerini döndürme de dahil olmak üzere javascript'ten bir nesnenin nasıl kullanılabilir hale getirileceğine dair basit bir örnek gösterecektir.
ilk QWebFrame ait addToJavaScriptWindowObject() yöntemidir, gerçekten bu entegrasyonu gerçekleştirmek için bilmeniz gereken iki şey vardır, bu javascript belirtilen QObject görünür hale getirecek verir. İhtiyacınız olan ikinci şey, 'da yayınlanan nesnelerin, javascript pencere nesnesinin her temizlendiğinde yok olacağıdır - . Kullanıcı her yeni sayfada gezinir. Bunun sorunlarına neden olmasını önlemek için, QWebFrame, nesnenin özel API'sini yeniden eklemenizi sağlayan temizlendiğinde size bildiren bir sinyal sağlar. Bu aslında çok daha basit kulağa geliyor!
bu çekirdek gerçekten örnekte iki yöntem uygulanmaktadır, bunlar aşağıda gösterildiği konum:
void MyApi::setWebView(QWebView *view)
{
QWebPage *page = view->page();
frame = page->mainFrame();
attachObject();
connect(frame, SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(attachObject()));
}
void MyApi::attachObject()
{
frame->addToJavaScriptWindowObject(QString("MyApi"), this);
}
Bu kod tüm gerçekleştirebilmek için ihtiyaç duyduğu tek şey javascript'in görebileceği MyApi nesnesinin ortak yuvaları. MyAPI sınıfı iki kamu yuvalara sahiptir: (! Evet, yuvaları şeyler dönebilirsiniz)
public slots:
void doSomething(const QString ¶m);
int doSums(int a, int b);
İlk slot basitçe ayıklama çıkışı bir mesaj kaydeder, ikinci döner iki argümanının toplamı .
MyApi.doSomething('Hello from JS page 2!!!!');
sum = MyApi.doSums(2, 3);
alert('C++ says the sum is ' + sum);
Ve bu ona orada hepsi: Onlar böyle javascript deniyor! Kodu http://xmelegance.org/devel/qtwebkitextension.tar.gz'dan indirebilirsiniz.
Bu örnek, maalesef QT5'de işlevsel değildir. Bir güncelleme için herhangi bir şans mı yoksa başka bir soru açmalı mıyım? – Alex
- 1. Pencere nesnesinde garip kendi nesnesi
- 2. Expose DependencyProperty
- 3. Sadece çıktı nesnesinde IE'de Console.log nesne nesnesi
- 4. Q ++
- 5. Q ++
- 6. C#: HtmlDocument nesnesinde kurucu yok mu?
- 7. C# nesnesinde Object devralınacak kadar?
- 8. C# COM Nesnesinde IProvideClassInfo Uygulaması
- 9. Docker EXPOSE. Geçtiğimiz iki günde
- 10. WebBrowser nesnesinde WebBrowser nesnesi ile oluşturulan oluşturulmuş Web Sayfası VB'de
- 11. Öğe sınıf adı SWF nesnesinde nasıl kullanılır? Jquery nesnesi eklentisi
- 12. C#: C# nesnesinde depolanan değeri kontrol edin, ondalık olsun ya da değil C#
- 13. C# nesnesi nasıl kullanılır?
- 14. Bir sınıf nesnesinde işlemler nasıl yapılır? C++
- 15. Q-Learning
- 16. DateTime nesnesinde farklı timezone_types
- 17. C++ nesnesini C++ nesnesi için yöneten C++ kodunu C++ kodunu karıştırırsam, ARC ele alır mı?
- 18. NSArray nesnesinde NSString dönüştürme
- 19. Özellik ileri sınıf nesnesinde bulunamadı?
- 20. JS nesnesinde dinamik nesne oluşturma
- 21. Get/Set nesnesi JsonPath C#
- 22. Yumurtlama oyun nesnesi birlik (C#)
- 23. C PHP Eklenti nesnesi persistance
- 24. plot.lm(): tanısal Q-Q çiziminde etiketli ayıklama sayıları
- 25. Session nesnesi ServletContext kullanarak
- 26. Tarayıcıda Q kütüphanesini kullanma
- 27. angularjs Sözler, $ q erteleme
- 28. Cakephp3 ElasticSearch Sorgu Q
- 29. Q vaatleriyle seri yürütme
- 30. Göstergelerin "q" olarak çizilmesi
Bilgi için teşekkürler! – BlueSilver