Angular4とAndroid/iOS(WebView/UIWebView)との値のやりとり
Android/iOSからjavascript側へ値を渡す方法として、以下の方法をとっていました
Android側(iOSもほぼ同様)
final String script = "javascript:window.toJS('%s');";
this.mWebView.loadUrl( String.format( script, param ) );
JavaScript側
window.toJS= function( text ) {
//処理
};
Angularを使用しない場合は上記で意図通りの動作ができました。
しかしながらAngular側で同様のことをやろうとすると
window.toJSの箇所にて
Property 'toJS' does not exist on type 'Window'.
というエラーが出てビルドを通すことができません。
(不思議なことにng serveにてlocalhostにてアプリ実行中に処理を書き換え、watchによる変更反映の際はtoJSにアクセスできます。オブジェクトとしては動的にメンバが作成されるので参照できるが、ビルド時は名前解決が出来ていないのだと思っています。)
windowを使用せずとも良いのですが
Android/iOSからAngularへの値のやり取りはどのようにすればよろしいのでしょうか?
(AngularからAndroid/iOSへ値の受け渡しは独自スキームへlocation.hrefし、Android/iOS側でそのスキームをハンドルすることで実現できています。)
AngularのバージョンはAngular4です。
検索をするとAngular1.x系では上記方法でもいけていたようです。
追記:
https://stackoverflow.com/questions/30960386/how-to-extend-the-window-typescript-interface/30961346
本解答欄および上記のポストを参考に以下でいけました。
declare global {
interface Window {
toJS;
}
}
~
window.toJS=function( text ) {
//処理
};
Android側の処理は変更なし。