android问题:setJavaScriptCanOpenWindowsAutomatically()的用法 5

webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);是什么意思?... webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);是什么意思? 展开
 我来答
8发8888555
财经观察员

推荐于2016-08-06 · TA获得超过1432个赞
知道小有建树答主
回答量:2231
采纳率:91%
帮助的人:134万
展开全部
支持通过js打开新的窗口
最近工作中,基本一直在用WebView,今天就把它整理下:
WebView 顾名思义,就是放一个网页,一个看起来十分简单,但是用起来不是那么简单的控件。
首先你肯定要定义,初始化一个webview,其实网上的例子很多,我这里就简单的把一些WebView 中可能会用到的的很重要的属性以及支持全屏播放视频该怎么实现的代码粘出来,直接放到项目中去就行了

[java] view plaincopy
<span style="white-space:pre"></span><pre name="code" class="java" style="font-size:18px;"><span style="white-space:pre"> </span>private WebView webview;<span style="font-family: Arial, Helvetica, sans-serif;"> </span>

[java] view plaincopy
<span style="white-space:pre"> </span>webview = (WebView) findViewById(R.id.webview);

[java] view plaincopy
<span style="white-space:pre"> </span>// 设置WebView属性,能够执行Javascript脚本
webview.getSettings().setJavaScriptEnabled(true);
//设置WebView 可以加载更多格式页面
t;span style="white-space:pre"> </span>webview.getSettings().setLoadWithOverviewMode(true);
//设置WebView使用广泛的视窗
t;span style="white-space:pre"> </span>webview.getSettings().setUseWideViewPort(true);
//设置WebView的用户代理字符串。如果字符串“ua”是null或空,它将使用系统默认的用户代理字符串
t;span style="white-space:pre"> </span>webview.getSettings().setUserAgentString();
//支持手势缩放
t;span style="white-space:pre"> </span>webview.getSettings().setBuiltInZoomControls(true);
//支持2.2以上所有版本
t;span style="white-space:pre"> </span>webview.getSettings().setPluginState(PluginState.ON);
//告诉webview启用应用程序缓存api。
t;span style="white-space:pre"> </span>webview.getSettings().setAppCacheEnabled(true);
//设置是否启用了DOM storage API。
t;span style="white-space:pre"> </span>webview.getSettings().setDomStorageEnabled(true);
//自动打开窗口
webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
// 没有的话会黑屏 支持插件
webView.getSettings().setPluginsEnabled(true);
/**
* setAllowFileAccess 启用或禁止WebView访问文件数据 setBlockNetworkImage 是否显示网络图像
* setBuiltInZoomControls 设置是否支持缩放 setCacheMode 设置缓冲的模式
* setDefaultFontSize 设置默认的字体大小 setDefaultTextEncodingName 设置在解码时使用的默认编码
* setFixedFontFamily 设置固定使用的字体 setJavaSciptEnabled 设置是否支持Javascript
* setLayoutAlgorithm 设置布局方式 setLightTouchEnabled 设置用鼠标激活被选项
* setSupportZoom 设置是否支持变焦
* */
// 排版适应屏幕
.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);web
// 设置Web试图 注意以下两个方法十分重要,很多需要重写:
t;span style="white-space:pre"> </span>//首先设置自定义的WebChromeClient来设置视频播放的一些问题
busWiFiWebView.setWebChromeClient(new DefaultWebChromeClient());
busWiFiWebView.setWebViewClient(new DefaultWebViewClientClient());
第一个方法:WebChromeClient:
//要重写其中的onShowCustomView 方法 表示进入全屏的时候,以及onHideCustomView 表示退出全屏的时候

界面的话,就是一个webview ,一个FrameLayout ,当全屏的时候就设置webview 隐藏,让FrameLayout全屏显示出来,那么视频就自动跑到FrameLayout这里面放了。退出全屏的时候,一样道理,这里要用到回调函数,自己理解吧。。。我讲的不好。。。

[java] view plaincopy
private class DefaultWebChromeClient extends WebChromeClient {
// 一个回调接口使用的主机应用程序通知当前页面的自定义视图已被撤职
CustomViewCallback customViewCallback;
// 进入全屏的时候
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
// 赋值给callback
customViewCallback = callback;
// 设置webView隐藏
webview.setVisibility(View.GONE);
// 声明video,把之后的视频放到这里面去
FrameLayout video = (FrameLayout) findViewById(R.id.video);
// 将video放到当前视图中
video.addView(view);
// 横屏显示
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// 设置全屏
setFullScreen();
}
// 退出全屏的时候
@Override
public void onHideCustomView() {
if (customViewCallback != null) {
// 隐藏掉
customViewCallback.onCustomViewHidden();
}
// 用户当前的首选方向
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
// 退出全屏
quitFullScreen();
// 设置WebView可见
webview.setVisibility(View.VISIBLE);
}

@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}
}
下面是两个方法,设置全屏和退出全屏的方法:注意,我捕捉到了,全屏状态下和窗口状态下他们分别的Flags数值。可见如下代码

[java] view plaincopy
/**
* 设置全屏
*/
private void setFullScreen() {
// 设置全屏的相关属性,获取当前的屏幕状态,然后设置全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 全屏下的状态码:1098974464
// 窗口下的状态吗:1098973440
}

/**
* 退出全屏
*/
private void quitFullScreen() {
// 声明当前屏幕状态的参数并获取
final WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setAttributes(attrs);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
第二个自定义的WebViewClient,继承WebViewClient

[java] view plaincopy
/**
* 使用系统默认webview
*/
private class DefaultWebViewClientClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
[java] view plaincopy
<span style="white-space:pre"> </span>return super.shouldOverrideUrlLoading(view, url);
//如果要下载页面中的游戏或者继续点击网页中的链接进入下一个网页的话,重写此方法下,不然就会跳到手机自带的浏览器了,而不继续在你这个webview里面展现了
}

@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
<span style="white-space:pre"> </span>//想在收到错误信息的时候,执行一些操作,走此方法
}

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
//想在页面开始加载的时候,执行一些操作,走此方法
}

@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
//想在页面加载结束的时候,执行一些操作,走此方法
}
}
最后还有一点很重要,要想进入同过webview浏览网页,而且点返回键是想在webview中返回,而不是直接退出程序,那么就得重写onKeyDown方法。还有

[java] view plaincopy
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK) {
WebView webView = (WebView) findViewById(R.id.webview_passenger);
if (webView.canGoBack()) {
// goBack()表示返回WebView的上一页面
webView.goBack();
//退出全屏
quitFullScreen();
} else {

}
return true;
}
return super.onKeyDown(keyCode, event);
百度网友e995d97
2015-06-27 · TA获得超过4152个赞
知道小有建树答主
回答量:2680
采纳率:0%
帮助的人:733万
展开全部
“老婆让我给5000一个的包包,我花500给她买了个高仿的,赚了4500私房钱!”
“我老婆也让我给5000一个的包包,我也花500给她买了个高仿的,但我赚了不止4500。”
“你是怎么做到的?”
“我拿这4500给自己买了份意外险,然后把包包真相告诉了老婆。”
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
悲愤的豆芽
2015-07-18 · TA获得超过374个赞
知道小有建树答主
回答量:269
采纳率:0%
帮助的人:211万
展开全部
setJavaScriptCanOpenWindowsAutomatically(true);
支持通过JS打开新窗口
例如:webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大家都来谈
2012-06-09
知道答主
回答量:39
采纳率:0%
帮助的人:9万
展开全部
支持通过js打开新的窗口
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
本报北京不能
2015-07-08 · TA获得超过6330个赞
知道大有可为答主
回答量:3019
采纳率:92%
帮助的人:844万
展开全部
支持通过js打开新的窗口
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式