之前的博客,都是 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那边定义一致 */ } }
执行结果: