OSX'de Safari 5.1'de eklenti eklentisi nasıl geri alınır?

Gecko fonksiyonları NPN_PluginThreadAsyncCall/pluginthreadasynccall benim için Safari 5.1'de çalışmıyor (Firefox çalışıyor) - işlevim aranmıyor. Başka bir iş parçacığında uzun süren bir görev gerçekleştirdikten sonra JavaScript'e bir işlev çağrısı yapmaya çalışıyorum. Bu işi nasıl yapabilirim?

0

1 cevap

Evet, FireBreath 'da Safari 5.1 ile aynı sorunu yaşadık. Bununla birlikte); NPN_PluginThreadAsyncCall artık çalışmıyor. Bulunduğunuz platformu belirtmediniz, bu yüzden hem Mac hem de Windows'da kullandığımız şeyi göstereceğim.

Pencerelerde bir HWND mesajı oluşturuyoruz ve olay verilerinde LPARAM olarak bir boşluk * geçiren HWND'ye mesaj gönderiyoruz; void *, pluginthreadasynccall'ın normalde alacağı, çağrı yapıldığı ve veri yapısının serbest bırakıldığı paramikleri tutan bir veri yapısına bir göstericiye geri dönüştürülür. Kullandığımız ileti pencere sınıfı buradadır , ve aramanın yapıldığı yer burasıdır . (IE'de çapraz iş aramaları için aynı mekanizmayı kullandığımızı unutmayın)

Mac’te temel olarak sadece c-performSelectorOnMainThread kullanıyoruz; c ++ 'dan kullanımı daha kolay hale getirmek için bir sınıfa sardık. kullandığımız zamanlayıcı sınıfı buradadır ve arama yapıldığı yer burasıdır . Dikkatli olmanız gerektiğine dikkat edin çünkü bunlarla çok fazla olası yarış koşulları vardır ve bazen tekrar giriş koduyla sonuçlanırsınız. FireBreath, çapraz iş aramalarının mükemmelleştirilmesi için düzinelerce saat çalışmaktadır; aldatıcı bir şekilde zor bir problem.

Umarım bu yardımcı olur!

1
katma
Yardımın için tekrar teşekkürler. Ben sadece iyi çalışıyor gibi görünüyor performSelectorOnMainThread kullanarak sona erdi :)
katma yazar Peter Tseng, kaynak