web-dev-qa-db-ja.com

Android WebViewでJavaScript関数を呼び出す

WebViewとButtonを使用したアクティビティがあります。 Android sdk 17. Webサイトは私のものではないので、変更することはできません。Androidボタンをクリックして、jsコードを実行する必要があります。

これをやろうとしている

public class RostelecomLoginActivity extends Activity {

WebView webView;
String url;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_rostelecom_login);

    Intent webIntent = getIntent();
    final String url = webIntent.getStringExtra("url");

    webView = (WebView) findViewById(R.id.webView1);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setSaveFormData(true);
    webView.getSettings().setSavePassword(true);

    Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            webView.addJavascriptInterface(new Object(){
                @JavascriptInterface
                public void test(){
                    Log.d("JS", "test");
                }
            },"Android");
            webView.loadUrl("javascript:(function(){document.getElementById('mA').click();})()");
        }
    });

    webView.loadUrl(url);

}}

しかし、それは何もしません。どうすればjsを正しく呼び出すことができますか?

13
Valeriy
webview.loadUrl("javascript:functionName(\"" + argument + "\")");
15

これで線を変えて.

myWebView.loadUrl("javascript:testEcho('Hello World!')");

これを試してみてくださいあなたに役立つかもしれません...

12
Vasu

アクセスしている外部Webサイトをクリックしたときに、テスト関数を呼び出そうとしていると思います。

Java側で定義した関数を呼び出す方法は、JavaScriptインターフェースを作成したときに割り当てた名前を使用することです。この場合、"Android"

したがって、呼び出しは「window.Android.test()」になります

また、あなたはウェブサイトをロードするのを待ってから、JavaScriptコードを注入する必要があります。

数週間前にコードで行った答えを確認してください JavaScriptが完了するまでWebViewを非表示にします 。これは、Webビューを使用してJSおよびJava=を管理するための同様のアプローチです。

ページが読み込まれたときに簡単なテストを開始し、後でJavaScriptクリック関数内に追加することを検討してください。

1
AlexBcn