2009-12-26 11 views
5

में काम नहीं करता है मैंने आधार के रूप में पुराने मोज़िला एनपीआरटाइम उदाहरण का उपयोग करके एक छोटी एनपीएपीआई प्लगइन लिखी है। मेरी समस्या यह है कि यह फ़ायरफ़ॉक्स और सफारी (विंडोज़ पर) पर ठीक काम करता है, लेकिन यह Google क्रोम के साथ काम करने में विफल रहता है।एक एनपीएपीआई प्लगइन Google क्रोम

मैं प्लगइन को यहां देख सकता हूं: प्लगइन्स बस ठीक है और जब मैं अपना टेस्ट पेज खोलता हूं तो प्लगइन चलाने के लिए क्रोम एक नई प्रक्रिया लॉन्च करता है, प्लगइन प्रक्रिया बिना किसी त्रुटि संवाद के ~ 10 सेकंड में मर जाती है। 10 सेकंड के दौरान प्रक्रिया स्क्रिप्ट योग्य प्लगइन ऑब्जेक्ट तक जीवित है, काम नहीं करता है (जो फ़ायरफ़ॉक्स या सफारी का उपयोग करते समय ठीक काम करता है)।

कोई भी विचार जो Chrome को 10 सेकंड के बाद प्लगइन प्रक्रिया को मारने का कारण बन सकता है? कुछ शुरुआतीकरण होना चाहिए, क्योंकि अगर मैं प्लगइन तक किसी भी तरह से उपयोग नहीं करता हूं तो यह इसे मारता है।

उत्तर

15

कुछ के लिए कहना मुश्किल है, लेकिन आप एक ही प्रक्रिया में प्लगइन लोड करते समय क्रोम को अलर्ट पॉप अप करने के लिए --plugin-startup-dialog कमांड लाइन पैरामीटर का उपयोग कर सकते हैं। फिर आप उस प्रक्रिया में डीबगर संलग्न कर सकते हैं, और उम्मीद है कि त्रुटि को पकड़ लें।

आप FireBreath पर देख सकते हैं कि यह देखने के लिए कि क्या आप प्रारंभिक कोड में कोई बड़ा अंतर डाल सकते हैं, क्योंकि FireBreath क्रोम में ठीक काम करता है। मैं एक डीबगर को जोड़ने की सलाह दूंगा, हालांकि, जब तक यह क्रैश न हो जाए तब तक कोड के माध्यम से कदम उठाएगा। प्रत्येक एंट्रीपॉइंट पर एनपीपी_न्यू, एनपीपी_Destroy, और एनपीपी_SetWindow पर ब्रेकपॉइंट्स सेट करें, और देखें कि क्या होता है।

एक और विकल्प स्रोत से क्रोमियम बनाने की कोशिश करना होगा (हास्यास्पद रूप से मुश्किल नहीं है, लेकिन समय लेने वाला) और फिर आप एक पूर्ण स्टैक ट्रेस प्राप्त कर सकते हैं जहां यह काम करना बंद कर देता है।

शुभकामनाएं!

+2

इसके अतिरिक्त, यदि यह कभी भी प्लगइन कोड दर्ज नहीं करता है और आप विंडोज़ पर हैं, तो * depend.exe * के साथ प्रोफाइलिंग क्रोम मूल्यवान संकेत दे सकता है। –

+1

-plugin-startup-dialog का उपयोग करके मुझे प्रारंभिक अनुक्रम को डीबग करने और समस्या को खोजने की अनुमति दी गई। धन्यवाद! – eburger

+0

क्या आप हमें बता सकते हैं कि समस्या क्या थी, अगर यह क्रोम-विशिष्ट है? – Gui13

5

टैक्सिलियन की नोक के लिए धन्यवाद, मैं प्रारंभिक अनुक्रम को डीबग करने में सक्षम था और पता चला कि उदाहरण प्लगइन प्लगइन के एनपी_इनिलाइज() को कॉल करते समय एक त्रुटि लौटा रहा था। उदाहरण प्लगइन में यह सुनिश्चित करने के लिए एक जांच थी कि प्लगइन की शिकायत में उपयोग की जाने वाली एनपीनेटस्केपफंक्स संरचना परिभाषा कम से कम उसी आकार के समान थी जितनी ब्राउज़र द्वारा दी गई थी। ऐसा लगता है कि क्रोम संरचना के संस्करण 1 का उपयोग करता है जो नवीनतम मोज़िला एक्सयूएल रनर एसडीके के संस्करण 22 की तुलना में स्वाभाविक रूप से छोटा है, जिससे मुझे npapi.h और npruntime.h मिल रहा था।