WebView 方法及所有对象方法整理

本文详细介绍了WebViewClient和WebSettings的重要方法与属性,包括页面加载、资源请求处理、JavaScript交互控制及网页显示设置等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


--未完待续。



-------------------WebViewClient对象



doUpdateVisitedHistory(WebView view, Stringurl,boolean isReload) //(更新历史记录) 


onFormResubmission(WebView view, MessagedontResend, Message resend)//(应用程序重新请求网页数据) 


onLoadResource(WebView view, String url)// 在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。 


WebResourceResponse shouldInterceptRequest(WebViewview,

            String url) //拦截所有请求


onPageStarted(WebView view, Stringurl,Bitmap favicon)//这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。 


onPageFinished(WebView view,String url)//在页面加载结束时调用。同样道理,我们知道一个页面载入完成,于是我们可以关闭loading 条,切换程序动作。 


onReceivedError(WebView view,int errorCode, Stringdescription, String failingUrl)// (报告错误信息) 


onReceivedHttpAuthRequest(WebView view, HttpAuthHandlerhandler, String host,String realm)//(获取返回信息授权请求) 


onReceivedSslError(WebView view, SslErrorHandlerhandler, SslError error)//重写此方法可以让webview处理https请求。


onScaleChanged(WebView view,float oldScale,float newScale) // (WebView发生改变时调用) 


onUnhandledKeyEvent(WebView view, KeyEvent event)//(Key事件未被加载时调用) 


shouldOverrideKeyEvent(WebView view,KeyEvent event)//重写此方法才能够处理在浏览器中的按键事件。 


shouldOverrideUrlLoading(WebView view,String url) 


//在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。



onReceivedLoginRequest(WebView view, Stringrealm,Stringaccount, Stringargs)//通知应用程序有个自动登录的帐号过程参数说明:@param view 请求登陆的webview@param realm 账户的域名,用来查找账户。@param account 一个可选的账户,如果是null 需要和本地的账户进行check, 如果是一个可用的账户,则提供登录。@param args 验证制定参数的登录用户



---------------WebSettings对象



public void setSupportZoom(boolean support)//是否支持缩放


public boolean supportZoom()


public void setMediaPlaybackRequiresUserGesture(boolean require)//设置的WebView是否需要用户操作播放媒体。默认true


publicboolean getMediaPlaybackRequiresUserGesture()


public voidsetBuiltInZoomControls(boolean enabled)//是否支持缩放 默认false


public boolean getBuiltInZoomControls()


public void setDisplayZoomControls(boolean enabled)//隐藏缩放按钮 默认false


public boolean getDisplayZoomControls()


public void setAllowFileAccess(boolean allow)//启用或禁用WebView访问文件数据 默认true


publicboolean getAllowFileAccess() 


public void setAllowContentAccess(boolean allow)//启用或禁用内部的WebView内容的URL访问 默认true


public boolean getAllowContentAccess()


public void setLoadWithOverviewMode(boolean overview)//概览模式显示网页 默认false


public boolean getLoadWithOverviewMode()


public void setSaveFormData(boolean save)//设置的WebView是否应该保存表单数据。默认值是true。


public boolean getSaveFormData();


public voidsetSavePassword(boolean save)//设置的WebView是否保存密码。默认值是true。


public voidsetSavePassword(boolean save)


public synchronizedvoid setTextZoom(int textZoom)//以百分比形式设置页面的文字缩放。默认值是100。


public synchronizedint getTextZoom()


public synchronizedvoidsetTextSize(TextSize t)//设置页面的文字大小


public synchronizedTextSizegetTextSize()


public void setDefaultZoom(ZoomDensity zoom)//设置页面的缩放密度


public ZoomDensity getDefaultZoom()


public synchronizedvoid setUseWideViewPort(boolean use)//调整到适合webview大小


public synchronizedboolean getUseWideViewPort()


public synchronizedvoid setSupportMultipleWindows(boolean support)//是否支持多窗口 默认的是false


public synchronizedboolean supportMultipleWindows()


public synchronizedvoid setLayoutAlgorithm(LayoutAlgorithm l)//支持内容重新布局


public synchronized LayoutAlgorithm getLayoutAlgorithm()


public synchronizedvoid setStandardFontFamily(String font)//设置标准字体系列名称。默认值是“sans-serif”。


public synchronized String getStandardFontFamily()


public synchronizedvoid setFixedFontFamily(String font)//设置固定的字体系列名称。默认值为“monospace”


public synchronized String getFixedFontFamily()


public synchronizedvoid setSansSerifFontFamily(String font)//设置sans-serif字体系列名称


public synchronized String getSansSerifFontFamily()


public synchronizedvoid setSerifFontFamily(String font)


public synchronized String getSerifFontFamily()


public synchronizedvoid setCursiveFontFamily(String font)


public synchronized String getCursiveFontFamily()


public synchronizedvoid setFantasyFontFamily(String font)yFontFamily() 


public synchronizedvoid setMinimumFontSize(int size)


public synchronizedint getMinimumFontSize()


public synchronizedvoid setMinimumLogicalFontSize(int size)


public synchronizedint getMinimumLogicalFontSize()


public synchronizedvoid setDefaultFontSize(int size)


public synchronizedint getDefaultFontSize()


public synchronizedvoid setDefaultFixedFontSize(int size)


public synchronizedint getDefaultFixedFontSize()


public synchronizedvoid setLoadsImagesAutomatically(boolean flag)//支持自动加载图片 默认true


public synchronizedboolean getLoadsImagesAutomatically()


public synchronizedvoid setBlockNetworkImage(boolean flag)//是否阻止网络图片数据 默认false


public synchronizedboolean getBlockNetworkImage()


public synchronizedvoid setBlockNetworkLoads(boolean flag)//是否阻止网络数据 默认false


public synchronizedboolean getBlockNetworkLoads()


public synchronizedvoid setJavaScriptEnabled(boolean flag)//是否支持js脚本 默认false


public synchronizedboolean getJavaScriptEnabled()


public abstractvoid setAllowUniversalAccessFromFileURLs(boolean flag);//通过此API可以设置是否允许通过file url加载的Javascript可以访问其他的源,包括其他的文件和http,https等其他的源 默认true


public abstractboolean getAllowUniversalAccessFromFileURLs();


public abstractvoid setAllowFileAccessFromFileURLs(boolean flag);???


public abstractboolean getAllowFileAccessFromFileURLs();


public synchronizedvoid setDatabasePath(String databasePath)//数据库的路径名称


public synchronized String getDatabasePath() 


public synchronizedvoid setGeolocationDatabasePath(String databasePath)//启动定位的数据库路径


public synchronizedvoid setAppCacheEnabled(boolean flag)//设置是否打开。默认关闭,即,H5的缓存无法使用。


public synchronizedvoid setAppCachePath(String appCachePath)//缓存路径


public synchronizedvoidsetAppCacheMaxSize(long appCacheMaxSize)//缓存最大内存


public synchronizedvoid setDatabaseEnabled(boolean flag)//启用数据库


public synchronizedboolean getDatabaseEnabled()


 link:http://johncookie.iteye.com/blog/1182459


public synchronizedvoid setDomStorageEnabled(boolean flag)//开启DOM storage默认关闭


public synchronizedboolean getDomStorageEnabled()


public synchronizedvoid setGeolocationEnabled(boolean flag)//是否启动地理定位


public synchronizedvoid setJavaScriptCanOpenWindowsAutomatically(boolean flag)//支持通过JS打开新窗口 。默认为false。


public synchronizedbooleangetJavaScriptCanOpenWindowsAutomatically()


public synchronizedvoid setDefaultTextEncodingName(String encoding)//设置在解码html页面使用默认的文本编码名称 默认


"Latin-1".


public synchronized String getDefaultTextEncodingName()


public synchronizedvoid setUserAgentString(String ua)//设置web视图的用户代理字符串。"Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X;en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334bSafari/531.21.10"....


public synchronized String getUserAgentString()


public static String getDefaultUserAgent(Context context)//返回默认用户代理


public soid setNeedInitialFocus(boolean flag)//当webview调用requestFocus时为webview设置节点  


public soid setCacheMode(int mode)//缓存策略


public int getCacheMode()


<think>好的,我现在需要回答用户关于WebView与JavaScript交互的问题。首先,用户希望了解交互方式或解决相关问题。根据用户提供的引用内容,虽然引用[1]提到了URL加载,引用[2]是关于Android的smali工具,可能与当前问题关联不大,但可能需要参考其他资料。 首先,我应该整理WebView与JavaScript交互的基本方法。常见的交互方式包括JavaScript调用Android原生代码和Android调用JavaScript函数。需要确保用户知道如何启用JavaScript支持,因为默认情况下WebView可能禁用JS。例如,通过WebSettings设置setJavaScriptEnabled(true)。 接下来,要考虑如何从Android调用JavaScript函数。通常使用loadUrl("javascript:function()")或者evaluateJavascript()方法。后者在API 19及以上更高效,能直接获取返回值。这里需要区分不同Android版本的处理方式。 然后是JavaScript调用Android代码的两种主要方法:通过addJavascriptInterface()注入接口对象,或者通过WebViewClient的shouldOverrideUrlLoading()拦截URL请求。前者更方便,但需要注意安全风险,比如在Android 4.2以下存在漏洞,需要添加@JavascriptInterface注解。后者通过自定义协议与前端约定,比较安全但相对繁琐。 用户可能遇到的常见问题包括:JavaScript未启用导致交互失败、Android版本兼容性问题、跨域访问限制、UI线程阻塞、安全漏洞等。需要逐一解释这些问题并提供解决方案。例如,跨域问题在Android 4.1以上可以通过@JavascriptInterface和正确的设置解决。 安全问题也是一个重点,特别是使用addJavascriptInterface时的漏洞。应该建议用户仅在必要时使用,并确保只在可信的页面中启用,或者使用shouldOverrideUrlLoading作为替代方案。 最后,生成相关问题,帮助用户进一步探索。例如,如何防止WebView中的JavaScript注入攻击,如何处理异步交互,或者如何调试WebView中的JS代码等。 需要确保回答结构清晰,分点说明交互方式和常见问题,并给出代码示例。同时检查LaTeX格式是否正确,虽然这个问题可能较少涉及数学公式,但如果有代码块需要正确标记。例如,Java代码使用三个反引号加语言类型,JavaScript同理。 总结步骤: 1. 启用WebView的JavaScript支持。 2. Android调用JavaScript的方法和示例代码。 3. JavaScript调用Android的方法,包括接口注入和URL拦截。 4. 常见问题及解决方法,如兼容性、跨域、安全等。 5. 生成相关问题供用户参考。</think>### WebView与JavaScript交互方式及常见问题解决 #### 一、基础交互方式 1. **启用JavaScript支持** 在Android WebView中默认禁用JS执行,需手动开启: ```java WebView webView = findViewById(R.id.webview); WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); // 必须显式启用[^1] ``` 2. **Android调用JavaScript** - **方式1:`loadUrl()`** 适用于所有Android版本,但无法直接获取返回值: ```java webView.loadUrl("javascript:showAlert('Hello from Android')"); ``` - **方式2:`evaluateJavascript()`** (API 19+)支持异步获取返回值: ```java webView.evaluateJavascript("(function() { return 2+3; })();", value -> { Log.d("Result", "计算结果:" + value); // 输出5 }); ``` 3. **JavaScript调用Android** - **方式1:接口注入(`addJavascriptInterface`)** 定义Java对象并暴露给JS: ```java class JsInterface { @JavascriptInterface public void showToast(String msg) { Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } } webView.addJavascriptInterface(new JsInterface(), "AndroidBridge"); ``` JS调用: ```javascript AndroidBridge.showToast('来自网页的消息'); ``` - **方式2:URL拦截(`shouldOverrideUrlLoading`)** 通过自定义协议实现: ```java webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith("js://")) { // 处理自定义逻辑 return true; } return super.shouldOverrideUrlLoading(view, url); } }); ``` JS触发: ```javascript location.href = "js://action?param=123"; ``` #### 二、常见问题与解决方案 1. **JS未生效** - 确认已调用`setJavaScriptEnabled(true)` - 检查是否在非UI线程调用WebView方法(需确保在主线程操作) 2. **Android 4.2以下接口注入漏洞** - 仅注入必要接口 - 使用`@JavascriptInterface`注解明确暴露方法[^2] 3. **跨域访问限制** - Android 4.1+默认禁止跨域,需添加以下配置: ```java settings.setAllowUniversalAccessFromFileURLs(true); settings.setAllowFileAccessFromFileURLs(true); ``` 4. **异步通信阻塞** - 避免在JS线程执行耗时操作: ```java @JavascriptInterface public void handleData(final String data) { new Handler(Looper.getMainLooper()).post(() -> { // 在主线程处理数据 }); } ``` 5. **安全加固建议** - 限制可信域名范围: ```java webView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { if (!url.startsWith("https://trusted-domain.com")) { webView.stopLoading(); } } }); ``` #### 三、完整交互示例 ```java // Android端 webView.addJavascriptInterface(new Object() { @JavascriptInterface public String getDeviceInfo() { return Build.MODEL; } }, "NativeBridge"); // JavaScript端 const device = NativeBridge.getDeviceInfo(); console.log("设备型号:" + device); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值