2017-09-22 6 views
0

私はAngularJs経由で関数を呼び出すことでwebview URLを変更しようとしていましたが、これまでのところ成功しませんでした。ここWebView URLをAngularで変更する

app.controller("speechController", function($scope){ 
    $scope.page = 'index.html'; 
    $scope.url = function(page){ 
     Android.receivePage(); 
    } 
}); 

そして、私のJavaクラスです:私はテストのためreceivePage関数を呼び出すためのonCreateでボタンを作成し

public class MainActivity extends AppCompatActivity { 


    Button b; 
    CustomWebViewClient customWebViewClient; 
    WebView myWebView; 
    private TextToSpeech tts; 
    private final int REQ_CODE_SPEECH_INPUT = 100; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setContentView(R.layout.activity_main); 



     myWebView = (WebView) findViewById(R.id.webView); 
     myWebView.addJavascriptInterface(this, "Android"); 
     myWebView.setWebViewClient(new WebViewClient()); 
     WebSettings webSettings = myWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     myWebView.loadUrl("file:///android_asset/index.html"); 
     b= (Button) findViewById(R.id.button); 
     b.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       receivePage(); 

      } 
     }); 

    } 



    @JavascriptInterface 
    public void receivePage() { 
     myWebView.loadUrl("file:///android_asset/index.html"); 
    } 
} 

お知らせが

は、ここに私の角のクラスです。そして、デバッグすることで、Angular関数とbutton onClick関数の両方でreceivePage()が正しく呼び出されていることに気付きましたが、ボタンだけが正しくURLを変更します。私はプロジェクトの必要性のためにwebviewを変更するために、角度を使用する必要があります。誰も私のコードがこのように動作している理由を知っていますか?

答えて

0

私はそれを理解したので、他の誰かが同じ問題を抱えている場合は、ここに投稿します。

@JavascriptInterface 
public void receivePage() { 
    myWebView.loadUrl("file:///android_asset/index.html"); 
} 

で:

@JavascriptInterface 
public void receivePage() { 
    myWebView.post(new Runnable() { 
     @Override 
     public void run() { 
      myWebView.loadUrl("file:///android_asset/index.html"); 
     } 
    }); 
} 
ので、事はJavascriptIntefaceがWebViewのとは別のスレッドを使用し、WebViewのは、同じスレッドによって行われた要求を受け入れることで、私がしなければならなかったすべてが置き換えられました
関連する問題