【问题标题】:calling javascript function from an android activity从 android 活动调用 javascript 函数
【发布时间】:2017-06-19 18:24:14
【问题描述】:

我想从一个 android 活动中调用一个 javascript 函数,但它似乎不起作用。 我使用了 android webview 函数 webview.loadUrl("javascript:function()"); 这是我的安卓代码:

package com.example.web;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.webkit.WebView;

public class MainActivity extends Activity {

    WebView webview;
    int i=30;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webview = (WebView)findViewById(R.id.webView1);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.loadUrl("file:///android_asset/index.html");
        webview.loadUrl("javascript:change(i)");

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

这是我的html代码:

 <html>
<body>
<div id="texta">text</div>
<script>

function change(num){
document.getElementById("texta").innerHTML=num;
}

</script>

</body>
</html>

【问题讨论】:

    标签: javascript android html


    【解决方案1】:

    在您尝试执行 javascript 时,您的页面可能尚未完全加载。你可以试试:

    webView.setWebViewClient(new WebViewClient() {
    
       public void onPageFinished(WebView view, String url) {
            view.loadUrl("javascript:change(i)");
        }
    });
    

    【讨论】:

    • 我认为这可能是我的问题。我现在就试试。
    • 我尝试在不传递任何参数的情况下使用该函数,并在 javascript 部分中手动设置该值,它工作正常。但是当我将变量 i 传递给函数时,它不起作用。
    • 这对我有用。谢谢!虽然我认为每次页面加载时都会调用该函数,即使对于不同的 URL,比如我点击搜索结果,无论页面是否存在,该函数都会在页面加载时再次被调用。要解决这个问题,您可以使用 if 或 switch 语句根据 url 字符串调用 javascript 函数。
    【解决方案2】:

    试试:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        webview = (WebView)findViewById(R.id.webView1);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.loadUrl("file:///android_asset/index.html");
        webview.loadUrl("javascript:change("+String.valueOf(i)+")");
    
    }
    

    【讨论】:

    • 请充实你的答案。
    • 已编辑答案,检查一下:)
    • 你没有很努力。
    • 解释你为什么建议你建议的答案。
    • 您看不到问题代码和我的答案有任何变化吗?程序员可以很容易地看到这个答案的不同之处和原因。还有什么问题吗?
    【解决方案3】:

    什么是“i”,如果“i”是数字,则指定数字,如果“i”是字符,请用双引号将其括起来,您正在调用一些参数的方法,请纠正您的错误.

    【讨论】:

      【解决方案4】:

      试试 webview.loadUrl("javascript:change(\""+i"\")");

      【讨论】:

        【解决方案5】:

         protected void onCreate(Bundle savedInstanceState) 
         {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
           final Activity MyActivity = this;
           text=(EditText)findViewById(R.id.textValue);
           Show=(Button)findViewById(R.id.textButton);
           webView= (WebView) findViewById(R.id.webView);
           getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
                                            Window.PROGRESS_VISIBILITY_ON);
           webView.setWebChromeClient(new WebChromeClient() {
           public void onProgressChanged(WebView view, int progress) {
        
           MyActivity .setTitle("Loading...");
             MyActivity .setProgress(progress * 100);
        
             if (progress == 100)
             MyActivity .setTitle("Android Dhina");
            }
           });
             webView.setWebViewClient(new WebViewClient());
             webView.addJavascriptInterface(new WebAppInterface(this), "Android");
        
             webView.getSettings().setJavaScriptEnabled(true);
             webView.loadUrl("file:///android_asset/web.html");
        
             Show.setOnClickListener(new OnClickListener()
              {
               @Override
               public void onClick(View v) 
               {
                 webView.loadUrl("javascript:callFromAndroidActivity
                                  (\""+text.getText().toString()+"\")"); }
                });
        

        【讨论】:

          【解决方案6】:

          试试看:

          String URL = "file:///android_asset/filename.html";
          webviewBrowser=(WebView)findViewById(R.id.webview);
          webview.getSettings().setJavaScriptEnabled(true);
          webview.setWebViewClient(new WebViewClient(webview.loadUrl(URL));
          

          【讨论】:

            【解决方案7】:

            尝试改变这一点:

            webview.loadUrl("javascript:change(i)");
            

            到这里

            webview.loadUrl("javascript:change(" + i +")");
            

            你写“i”的方式不是你的java代码中的变量“i”,而只是一个名为“i”的字符串。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-02-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多