之前的博客,都是 findViewById(R.id.webview);,來得到WebView, 此博客使用 new WebView(this)方式;
AndroidManifest.xml中配置網絡訪問權限:
<!-- 網絡訪問權限 --> <uses-permission android:name="android.permission.INTERNET" />
Activity:
package cn.h5; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.webkit.JavascriptInterface; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; /** * WebView的另外種方式 */ public class MainActivity6 extends AppCompatActivity { // 鏈接地址 public static final String SERVER_HOST = "https://www.sina.com.cn"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /** * 定義此WebView 用於去展現網絡上的網頁 */ WebView webView = new WebView(this); /** * 通過此WebView 獲取到 WebSettings ,通過WebSettings設置WebView */ WebSettings webSettings = webView.getSettings(); /** * 設置支持JavaScript激活,可用等 */ webSettings.setJavaScriptEnabled(true); /** * 設置自身瀏覽器,注意:可用把WebView理解為瀏覽器,設置new WebViewClient()后,手機就不會跳轉其他的瀏覽器 */ webView.setWebViewClient(new WebViewClient()); /** * addJavascriptInterface是添加(給js調用-->Java方法) * JSHook里面的方法 就是給JavaScript調用的; * androidCallbackAction是JavaScript/HTML/H5那邊定義定義的標識,所以必須和JavaScript/HTML/H5那邊定義標識一致 */ webView.addJavascriptInterface(new JSHook(),"androidCallbackAction"); webView.loadUrl(SERVER_HOST); /** * 設置好webView.loadUrl(SERVER_HOST);后,需要setContentView(webView); */ setContentView(webView); } /** * 此JSHook類名是睡意取得 * 也可以取名Wie JavaScriptCallbackJava * JavaScriptToJava * ...... */ class JSHook { /** * 給JavaScript調用的方法 * 注意:方法名 方法參數 必須和 JavaScript/HTML/H5那邊定義一致 */ @JavascriptInterface // 高版本需要加入此@JavascriptInterface public void javaScriptToJava1() { Log.d("@@@", "JavaScript調用當前此方法....."); } /** * 給JavaScript調用的方法 * 注意:方法名 方法參數 必須和 JavaScript/HTML/H5那邊定義一致 */ @JavascriptInterface // 高版本需要加入此@JavascriptInterface public void startToCallActivity() { Log.d("@@@", "JavaScript調用當前此方法....."); } /** * 給JavaScript調用的方法 * 注意:方法名 方法參數 必須和 JavaScript/HTML/H5那邊定義一致 */ @JavascriptInterface // 高版本需要加入此@JavascriptInterface public void updateListData() { Log.d("@@@", "JavaScript調用當前此方法....."); } /** * 給JavaScript調用的方法 * 注意:方法名 方法參數 必須和 JavaScript/HTML/H5那邊定義一致 */ @JavascriptInterface // 高版本需要加入此@JavascriptInterface public void requestByID(int id, String flag) { Log.d("@@@", "JavaScript調用當前此方法....."); } /** * 給JavaScript調用的方法 * 注意:方法名 方法參數 必須和 JavaScript/HTML/H5那邊定義一致 */ @JavascriptInterface // 高版本需要加入此@JavascriptInterface public String getThisInfoData() { Log.d("@@@", "JavaScript調用當前此方法....."); return "ljfr4sfdsfs"; } /** * JavaScript/HTML/H5 那邊定義要回調Android的Java 哪些方法,就可用在JSHook中定義 * 注意:方法名 方法參數 必須和 JavaScript/HTML/H5那邊定義一致 */ } }
執行結果: