AndroidはWebViewを実装して、assetsフォルダーの下にhtmlファイルをロードし、androidは対話のためにh5を埋め込み、エラーネットをデバッグします::: ERR_FILE_NOT_FOUND

デバッグエラーネット:: ERR_FILE_NOT_FOUND 

私の環境:win7、Android studio 3.0.1。Java8;

webView.loadUrl( "file://// android_asset / text");

AndroidスタジオでのHTMLハイパーリンクの使用:

<a href="file:///android_asset/text2">点击</a> </ head>

AndroidとH5の相互作用


1. webView読み込みページ
Androidでは、webviewを使用してhtmlページが読み込まれ、HTMLファイルの場所に応じて書き込みが異なることは誰もが知ってい
ます。

webView.loadUrl( "file://// android_asset / text");

:ウェブページを読み込む

mWebView.loadUrl( "http://www.baidu.com")


mWebView.loadUrl()を呼び出してそれをロードするだけの場合、ページのリンクをクリックすると、携帯電話のデフォルトのブラウザーでページが開きます。アプリでページを開く場合は、setWebViewClientを設定する必要があります。

mWebView.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    mWebView.loadUrl(url);
                    return true;
                }
            }


2. AndroidはJavaを介してHTMLページのJavaScriptメソッドをローカルで呼び出します
。jsメソッドを呼び出す場合は、webViewをサポートする必要があります
WebSettings webSettings = mWebView.getSettings();
// jsメソッドを呼び出すように設定
webSettings.setJavaScriptEnabled(true);

呼び出された場合jsメソッドには戻り値がありません。mWebView.loadUrl( "JavaScript:do()")を直接呼び出すことができます。ここで、doはjsのメソッドです。戻り値がある場合は、mWebView.evaluateJavascript()メソッドを呼び出すことができます。

        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                webView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() {
                    @Override
                    public void onReceiveValue(String value) {
                        tv.setText("sum= "+value);
                    }
                });
            }
        });


jsコードは次のとおりです。

<script type="text/javascript">
function sum(a,b){
return a+b;
}

</script>


2. jsがAndroidネイティブJavaメソッドを呼び出すAndroid4.2
以降では、@ JavascriptInterfaceアノテーションを直接使用して宣言できます。以下はローカルJavaメソッドです

package com.itep.myapplication;

import android.webkit.JavascriptInterface;

/**
 * Created by Administrator on 2020/4/10 0010.
 */

public class JsInteration {
    @JavascriptInterface
    public String back() {
        return "hello world";
    }

}


このメソッドを定義した後、mWebView.addJavascriptInterface()メソッドを呼び出します。

webView.addJavascriptInterface(new JsInteration()、 "android_ceshi");


それで、jsでそれを呼び出す方法は?

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <h1>text 2</h1>
    <button οnclick="s()">dianji</button>
    <script type="text/javascript">
    function sum(a,b){
    return a+b;
    }
     function s(){
    var result =window.android_ceshi.back();
    document.getElementById("p").innerHTML=result;
    }
     function ceshi(){

   var ss="123";
   document.write(ss);
    }


    </script>
</head>
<body>
<button οnclick="s()">调用本地方法</button>
<a href="file:///android_asset/test2">点击</a>
<p id="p"></p>
</body>
</html>



4. HTMLページのクリックイベントをインターセプトする

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
//判断url拦截事件
                if (url.equals("file:///android_asset/text2")) {
                    Log.e(TAG, "shouldOverrideUrlLoading: " + url);
                    startActivity(new Intent(MainActivity.this,MainActivity_two.class));
                    return true;
                } else {
                    webView.loadUrl(url);
                    return false;
                }
            }
        });


 

tex.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <p>你好你好script type你好script type你好script type你好script type</p>
    <button οnclick="ceshi()">dianji</button>
    <button οnclick="ceshi()">dianji</button>
    <button οnclick="ceshi()">dianji</button>
    <button οnclick="ceshi()">dianji</button>
    <button οnclick="ceshi()">dianji</button>
    <button οnclick="ceshi()">dianji</button>
    <script type="text/javascript">
    function sum(a,b){
    return a+b;
    }
     function s(){
    var result =window.android.back();
    document.getElementById("p").innerHTML=result;
    }
     function ceshi(){
     var ss="123";
     document.write(ss);
    }


    </script>
    <a href="file:///android_asset/text2">点击</a></head>
<body>
<button οnclick="s()">调用本地方法</button>

<p id="p">ceshi</p>
</body>
</html>

text2.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <h1>text 2</h1>
    <button οnclick="s()">dianji</button>
    <script type="text/javascript">
    function sum(a,b){
    return a+b;
    }
     function s(){
    var result =window.android.back();
    document.getElementById("p").innerHTML=result;
    }
     function ceshi(){

   var ss="123";
   document.write(ss);
    }


    </script>
</head>
<body>
<button οnclick="s()">调用本地方法</button>
<a href="file:///android_asset/test2">点击</a>
<p id="p"></p>
</body>
</html>

 

MainActivity.class

package com.itep.myapplication;

import android.content.Intent;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.ValueCallback;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    // Used to load the 'native-lib' library on application startup.
    static {
        System.loadLibrary("native-lib");
    }

    WebView webView;
    TextView tv;

    /**
     * @param savedInstanceState
     */
    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        webView = findViewById(R.id.wb);
        WebSettings webSettings = webView.getSettings();
        //设置为可调用js方法
        webSettings.setJavaScriptEnabled(true);
        webView.getSettings().setDefaultTextEncodingName("utf-8");
//        webView.loadUrl("file:////android_asset/text.html");
        webView.loadUrl("file:////android_asset/text");
        // Example of a call to a native method
        tv = (TextView) findViewById(R.id.sample_text);
        webView.addJavascriptInterface(new JsInteration(), "android");
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
//判断url拦截事件
                if (url.equals("file:///android_asset/text2")) {
                    Log.e(TAG, "shouldOverrideUrlLoading: " + url);
                    startActivity(new Intent(MainActivity.this,MainActivity_two.class));
                    return true;
                } else {
                    webView.loadUrl(url);
                    return false;
                }
            }
        });
        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

        //        tv.setText(new Text().stringFromJNI());
    }

    /**
     * A native method that is implemented by the 'native-lib' native library,
     * which is packaged with this application.
     */
    public native String stringFromJNI();
}

 

JsInteration:
package com.itep.myapplication;

import android.webkit.JavascriptInterface;

/**
 * Created by Administrator on 2020/4/10 0010.
 */

public class JsInteration {
    @JavascriptInterface
    public String back() {
        return "hello world";
    }

}

 

元の記事を649件公開 賞賛された659件 590,000回の閲覧

おすすめ

転載: blog.csdn.net/qq_38998213/article/details/105438878