2014-01-13 2 views
0

Я хотел изменить одно входное значение в html после загрузки веб-страницы. Я готов сделать это, вызвав функцию javascript с помощью WebView. Он работал хорошо, если я установил android:targetSdkVersion в 18. Но как только я установил его в 19, он отображает значение второго URL-адреса, даже если это только вызовы javascript. Вот код теста:Как позвонить JavaScript с Android 4.4 Webview?

import android.app.Activity; 
import android.os.Bundle; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class WebActivity extends Activity { 
    private WebView mWebView; 
    private String mJSCall; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     setContentView(R.layout.activity_webview); 

     mWebView = (WebView)findViewById(R.id.webview); 
     mWebView.getSettings().setJavaScriptEnabled(true); 

     mWebView.setWebViewClient(new WebViewClient() { 
      @Override 
      public void onPageFinished(WebView view, String url) { 
       if (mJSCall != null) { 
        view.loadUrl(mJSCall); 
        mJSCall = null; 
       } 

       super.onPageFinished(view, url); 
      } 

      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       // TODO Auto-generated method stub 
       view.loadUrl(url); 

       return super.shouldOverrideUrlLoading(view, url); 
      } 

     }); 

     mWebView.loadUrl("http://wap.soso.com/?g_f=2405"); 
     String keyword = "My Keyword"; 
     mJSCall = "javascript:document.getElementById('keyword').value='"+keyword+"'"; 

     super.onCreate(savedInstanceState); 
    } 
} 

Не могли бы вы сказать мне, почему это не удалось вызвать функцию яваскрипта когда targetSdkVersion=19? Похоже, что когда метод onPageFinished называется первым URL-адресом, который иногда обновляется, возможно, именно поэтому я не мог изменить значение в html в то время.

Так есть ли подходящее время для вызова javascript, кроме onPageFinished? В последний день я изо всех сил пытался найти разумное решение. Если кто-то может помочь, пожалуйста. Спасибо!

ответ

3

Не могли бы вы рассказать мне, почему он не смог вызвать функцию javascript, когда targetSdkVersion = 19?

Use evaluateJavascript() instead. loadUrl() всегда загружает новую страницу на Android 4.4 с целевой версией SDK версии 19+ вместо того, чтобы оценивать URL-адрес javascript: в контексте загруженной в данный момент страницы, как и раньше.

+0

Я не знаю, почему это не вызвало функцию javascript, когда targetSdkVersion = 19. Я полагаю, что Google изменил поведение метода loadUrl для Android 4.4. Я попытаюсь использовать оценкуJavascript() позже. Спасибо! – Sherlock

+0

вы можете взглянуть на [это] (http://stackoverflow.com/questions/31702036/webview-shouldoverrideurlloading-not-getting-called) –

Смежные вопросы