Electronの内部にSWFを埋め込み、JS←→SWFで命令を送り合いたかったけれど、あまりうまく行かなかったお話
検証バージョン
- Electron v0.29.2
- Mac OSX Yosemite バージョン10.10.4
- Mac OSX、Chrome用のPepperFlashPlayer.plugin(Adobe Flash Player 18.0 r0)
できたこと
「using-pepper-flash-plugin.md - GitHub」や「hokein/electron-sample-apps/pepper-flash-plugin - GitHub」 を参考にelectron-prebuiltでSWFを表示してみること。
うまく行かなかったこと
- electron-packagerでパッケージ化した時に「Couldn't load plugin.」と表示されswfを表示できなかった。
- JavaScript側からExternalInterface経由でFlashへ命令を送れなかった。
- Flash側からExternalInterface経由でJSへ命令を送れなかった。
使用したファイル / コード
- main.js
- package.json
- index.html
- ElectronSwfViewer.html
- ElectronSwfViewer.swf - ElectronSwfViewer.asをビルドしてできたswf
- swfobject.js - [swfobject - GoogleCode] (https://code.google.com/p/swfobject/)
- PepperFlashPlayer.plugin - chrome://plugins からChromeのプラグインが保存されている場所を調べ、コピーしてきたFlashのプラグインファイル
上記を試した時の挙動
JavaScript側からExternalInterface経由でFlashへ命令を送れなかった。
-
FlashのSecurity.sandboxType が "localWithNetwork" になっているため?"localTrusted"になれるとよさそうだけれど・・・。
-
通常ならJSから呼び出せるはずのSWFで定義されているcallSwfFunc()関数がundefinedだった
alert("" + document.getElementById("ElectronSwfViewer").callSwfFunc )
( 期待していた挙動 - ElectronSwfViewer.htmlをローカルサーバーで実行した例 )
electron-packagerでパッケージ後に、SWFが表示されない
まとめ
パッケージ化した時に動かないとなると他の人に渡すためには使えないし、JSとの連携もできないとSWFを表示させているだけのあまり意味のないものになりそう。プラグインを直接埋め込んでるというのも、Flash Playerがリリースされるたびに差し替えないといけないのか?というところが気になる。
Electronのwebview内の扱いがよくわかっていないので、あとでもうちょっと調べたい。