NPAPIプラグインを作成して、macbookのメディアキーを聞き、それをjavascriptに渡してpandoraやsoundcloudなどのものを制御しようとしています。 SpotifyのSPMediaKeyTapライブラリを使用しています。これはCGEventTapを別のスレッドでラップするだけです。NPAPIプラグインでのCGEventTapsの処理
私の問題は、npn_invokeを使用してjavascriptに戻ることです。これは正常に動作しますが、CGEventTapコールバックからトリガされると、プラグインがクラッシュします。私はこれをプラグインスレッドから実行する必要があることを認識しています。メインスレッドに[NSObject performSelectorOnMainThread]と[NSObject performSelector:onThread]の両方を使用して渡すようにしました。プラグインスレッドはメソッドを作成します。いずれのnpnコールでも、これらのソリューションはどちらもクラッシュします。 NPNブラウザのインタラクションコールで状態が無効になる原因となるCGEventTapイベントを処理するときに何か他のことはありますか?
どこにスタックトレースがありますか? NPN_Invokeの呼び出し方法のサンプルコード – taxilian
したがって、NPP_Newではmain_thread = [NSThread currentThread]を使用してスレッドを保存します。 main_thread であり、それは、この行にクラッシュ[:onThread:blahblah自己performSelectorを]: は次にSPMediaKeyTapのハンドラで、私が呼び出し ブラウザ - >のgetValue(例えば、NPNVWindowNPObject、&ウィンドウ) NPAPIプラグインでスタックトレースを取得する方法がわかりません... – msfeldstein
ブラウザオブジェクト(NPNetscapeFuncs *)にアクセスするとクラッシュするようです。私は起こっていることは、主なイベントがプラグインプロセスにあるブラウザ変数にアクセスできないメインのChromeプロセスに入ってくることだと思います。私はその行にEXC_BAD_ACCESS/KERN_PROTECTION_FAILUREを取得します。私は静的変数にコマンドを保存し、それをHandleEventでチェックしてJS関数を呼び出すとうまくいきます。私は、UIプロセスからプラグインプロセスで何かを行うようにプラグインに指示する方法が必要です。 – msfeldstein