WebView加载本地html、js文件常见问题及解决办法
声明:基于android studio平台,php语言搭建服务器
目录:
六、java跟JavaScript相互调用常见问题及解决办法
1、Uncaught ReferenceError: functionName is not defined
一、JavaScript脚本语言没有反应
问题描述:
webview加载本地html文件,html文件中常常包含很多js脚本代码,例如某个按钮的点击事件,但是js代码将不起作用;
解决办法:
java代码在用webview加载html文件之前先对webview进行设置,让webview可以支持js代码:
WebSettings webSettings = webViMain.getSettings();
webSettings.setJavaScriptEnabled(true);
二、alert无法弹出
问题描述:
webview加载本地html文件,html中的js文件包含alert弹出框代码,但是webview无法弹出alert;
解决办法:
在java代码中添加下面这句:
webViMain.setWebChromeClient(new WebChromeClient() {});
三、html页面之间不能跳转
问题描述:
webview加载本地html文件,想在html文件中实现跳转到另一个html文件(代码如下),html代码本身没问题,文件路径也是对的,但是跳转失败,显示文件不存在或被删除...
window.location.href="my_life.html";
解决办法:
之所以不能实现html文件之间的跳转是因为上面那句跳转界面的代码只能在浏览器中才能被支持,可以为webview设置如下代码,相当于赋予webview代理浏览器的功能:
webViMain.setWebViewClient(new WebViewClient() {});
四、屏幕缩放没有达到预期效果
问题描述:
webview加载本地html文件,html文件中是支持缩放的(代码如下),但是在手机运行程序的时候不支持缩放页面;
<meta name="viewport" content="width=device-width, initial-scale=1.0 user-scalable=yes">
解决办法:
手机不能缩放是因为虽然html已经支持缩放了,但是webview仍然需要进行设置,让其支持html页面进行缩放:
WebSettings webSettings = webViMain.getSettings();
webSettings.setUseWideViewPort(true); //设置缩放后不会变形
webSettings.setBuiltInZoomControls(true); //设置可以缩放
五、使用$.ajax()跨域访问服务器的时候没反应
问题描述:
webview加载本地html文件,html文件需要访问服务器(代码如下),代码本身没问题,但是访问失败,没有反应
$.ajax({
url: "http://suqhhhh.imwork.net:57037/App&Php_Dmo/login.php",
data: {
username: $("#username").val(),
password: $("#password").val(),
},
type: "POST",
timeout: 36000,
dataType: "text",
success: function(data, textStatus) {
if (data == "登录成功") {
window.location.href = "my_life.html"; //在原窗口加载新页面
//window.open("my_life.html"); //在新窗口加载新页面
} else {
alert(textStatus + ":" + data);
}
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("error:" + textStatus);
}
});
解决办法:
这里访问服务器涉及到跨域访问,需要在服务器代码添加header,让外部代码可以进行跨域访问,否则得不到访问权限:
<?php
// 指定允许其他域名访问
header('Access-Control-Allow-Origin:*');
六、java跟JavaScript相互调用常见问题及解决办法
1、Uncaught ReferenceError: functionName is not defined
问题描述:
webview加载本地html文件,程序运行不起来,报错:
Uncaught ReferenceError: functionName is not defined...
解决办法:
问题出现原因,网页的js代码没有加载完成,就调用了js方法。解决方法是在网页加载完成之后调用js方法:
webViMain.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
//在这里执行你想调用的js函数
}
});
2、安全限制问题
问题描述:
如果只在4.2版本以上的机器出问题,那么就是系统处于安全限制的问题了。Android文档这样说的:
Caution: If you’ve set your targetSdkVersion to 17 or higher, you must add the @JavascriptInterface annotation to any method that you want available your web page code (the method must also be public). If you do not provide the annotation, then the method will not accessible by your web page when running on Android 4.2 or higher.
中文大意为:
警告:如果你的程序目标平台是17或者是更高,你必须要在暴露给网页可调用的方法(这个方法必须是公开的)加上@JavascriptInterface注释。如果你不这样做的话,在4.2以以后的平台上,网页无法访问到你的方法。
解决办法:
将targetSdkVersion设置成17或更高,引入@JavascriptInterface注释
待补充。。。
WebView加载本地html、js文件常见问题及解决办法的更多相关文章
- WebView加载本地Html文件并实现点击效果
Webview是用来与前端交互的纽,可以加载本地Html文件,和网页并实现交互的功能. WebView通过WebSetting可以使用Android原生的JavascriptInterface来进行j ...
- webView 加载本地文件 - html/htm pdf docx tx
- (void)viewDidLoad { [super viewDidLoad]; [self setupUI]; NSString *path = [[NSBundle mainBundle] p ...
- iOS WebView 加载本地资源(图片,文件等)
https://www.cnblogs.com/dhui69/p/5596917.html iOS WebView 加载本地资源(图片,文件等) NSString *path = [[NSBundle ...
- JQuery 加载 CSS、JS 文件
JS 方式加载 CSS.JS 文件: //加载 css 文件 function includeCss(filename) { var head = document.getElementsByTagN ...
- 使用getScript()方法异步加载并执行js文件
使用getScript()方法异步加载并执行js文件 使用getScript()方法异步请求并执行服务器中的JavaScript格式的文件,它的调用格式如下所示: jQuery.getScript(u ...
- 转:Android Webview 加载外部html时选择加载本地的js,css等资源文件
原文地址:http://m.blog.csdn.net/blog/qduningning/43196819 在使用WebView加载网页的时候,有一些固定的资源文件如js的jquery包,css,图片 ...
- Android WebView加载本地html并实现Java与JS交互
最近做的一个项目中,用到自定义地图,将自定义地图转换成html页面,现在需要做的是如何将本地的html加载到android中,并可以实现交互. 相关讲解: 其实webview加载资源的速度并不慢,但是 ...
- 解决WebView加载本地文件乱码
一.问题描述 这几天现场反馈一些问题,主要是文件浏览有部分文件显示乱码,像这样: 而文件本身又是用WebView加载的,出现有的文件正常有的文件不正常. 二.问题解决 webView 加载主要有:lo ...
- Swift - 网页控件(UIWebView)加载本地数据,文件
使用UIWebView加载本地数据或资源有如下三种方式: 1,使用loadHTMLString方法加载HTML内容 2,使用loadRequest方法加载本地资源(也可用于加载服务器资源) 3,先将内 ...
随机推荐
- 免费微信公众号专用h5在线电影票API
免费h5在线电影票API,通过嵌套返回的h5页面url,实现电影票购买. 接口文档:https://www.juhe.cn/docs/api/id/252,通过此申请APPKEY 接口备注:通过请求返 ...
- JVM 运行时数据区域
Java虚拟机管理的内存包括以下几个运行时数据区域: 1.程序计数器: 程序计数器是一块比较小的内存空间,是当前线程执行的字节码行号指示器.Java多线程是通过线程轮流切换来实现的,所以每个线程都有一 ...
- MIT jos 6.828 Fall 2014 训练记录(lab 1)
注: 源代码参见我的github:https://github.com/YaoZengzeng/jos Part 1: PC Bootstrap +------------------+ <- ...
- 【C#】1.算法温故而知新 - 简单的桶排序
该算法的时间复杂度是O(M+N),M为桶的个数,N为待排序的个数 缺点: 1.不适用于小数 2.当数值过多,太浪费空间,比如数值范围为0~99999,那需申请100000个变量,也就是要写成a[100 ...
- iOS是怎么"绘画"的?
什么是绘图引擎 如果您以前从事其它平台的图形/界面开发或者游戏开发,一定知道, 不管上层UI怎么呈现和响应, 底层必须有一个绘图引擎. iOS也不例外. 本文详细介绍了iOS Graphics的用法和 ...
- 边工作边刷题:70天一遍leetcode: day 86
Word Pattern II 要点: 注意与I的差异,其实题不难,看到这种迷乱的,首先要想到backtrack 1:1 mapping两个条件:p in and str in, or p not i ...
- QTP基础学习(一)安装目录介绍
上一篇介绍了QTP 10 安装,安装完成后就可以看到文件的目录了,这里主要介绍以下几个目录及作用. 简单介绍部分目录 1.addins:插件包 2.bin目录:可执行程序,这里存储了很多配置文件.运行 ...
- Mybaits学习总结2
http://www.cnblogs.com/xdp-gacl/p/4262895.html 继续参考这篇文章写Mybaits学习总结 上一章,我修改了编码,统一为UTF8之后,便没有编码错误 < ...
- Maven简介与简单使用
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具.由于 Maven 的缺省构建 ...
- gridControl控件动态绑定列
DataTable dt = =Query.GetCustome=(ref customColumnCount); //绑定列 gridView.Columns.Add(}); gridView.Co ...