質問: "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系では上記方法でもいけていたようです。 --- 追記: 本解答欄および上記のポストを参考に以下でいけました。 ``` declare global { interface Window { toJS; } } ~ window.toJS=function( text ) { //処理 }; ``` Android側の処理は変更なし。
回答: TypeScriptでお書きですか? もしTypeScriptならば、独自に既存のClassを拡張する際は、 ``` interface Window { toJS; } window.toJS = function(text) { console.log("hello"); } ``` と、interfaceをつけてやる必要があります。