ElectronでSWFを扱おうとして失敗した話(コメント欄で解決、近々本記事も更新します)

More than 1 year has passed since last update.

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へ命令を送れなかった。

使用したファイル / コード

上記を試した時の挙動

JavaScript側からExternalInterface経由でFlashへ命令を送れなかった。

  • FlashのSecurity.sandboxType が "localWithNetwork" になっているため?"localTrusted"になれるとよさそうだけれど・・・。
    electron-debug0.png

  • 通常ならJSから呼び出せるはずのSWFで定義されているcallSwfFunc()関数がundefinedだった

alert("" + document.getElementById("ElectronSwfViewer").callSwfFunc )

electron-debug1.png

( 期待していた挙動 - ElectronSwfViewer.htmlをローカルサーバーで実行した例 )
testボタンを押した時に期待する表示.png

electron-packagerでパッケージ後に、SWFが表示されない

main.js

SWFがロードされない.png

まとめ

パッケージ化した時に動かないとなると他の人に渡すためには使えないし、JSとの連携もできないとSWFを表示させているだけのあまり意味のないものになりそう。プラグインを直接埋め込んでるというのも、Flash Playerがリリースされるたびに差し替えないといけないのか?というところが気になる。
Electronのwebview内の扱いがよくわかっていないので、あとでもうちょっと調べたい。