34131


Android/iOSからjavascript側へ値を渡す方法として、以下の方法をとっていました

Android側(iOSもほぼ同様)

[code]

    final String script = "javascript:window.toJS('%s');";
    this.mWebView.loadUrl( String.format( script, param ) );
    
[/code]

JavaScript側

[code]

    window.toJS= function( text ) {
        //処理
    };
    
[/code]

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>  
本解答欄および上記のポストを参考に以下でいけました。

[code]

    declare global {
      interface Window {
        toJS;
      }
    }
    ～
    window.toJS=function( text ) {
        //処理
    };
    
[/code]

Android側の処理は変更なし。


CC BY-SA 3.0
2017-04-19T10:02:42.877
34123
2017-04-24T10:24:07.790
2017-04-24T10:24:07.790
19716
19716
question
angular2 angular4
Angular4とAndroid/iOS(WebView/UIWebView)との値のやりとり


TypeScriptでお書きですか？  
もしTypeScriptならば、独自に既存のClassを拡張する際は、

[code]

    interface Window {
        toJS;
    }
    window.toJS = function(text) {
        console.log("hello");
    }
    
[/code]

と、interfaceをつけてやる必要があります。


CC BY-SA 3.0
2017-04-19T22:55:03.307
34131
2017-04-19T22:55:03.307
15705
34123
answer