壹影博客.
我在下午4点钟开始想你
WebView加载Js的常用方法
  • 2020-8-13日
  • 1评论
  • 1102围观

WebView加载Js的常用方法

我们在利用androlua开发程序的时候经常会用到WebView加载JavaScript代码,我们最常用的方法如下

方法一:

控件ID.loadUrl([===[javascript:你的Js代码放这里]===])--记得替换webView控件ID哦,FA默认的webView控件ID就是webView
--上面之所以要加[===[]===]是为了处理Js代码中包含[[]]等关键字符串导致无效的情况

上面的加载Js的方法是通过网址里面  加javascript: 实现的 这种方法只要是个浏览器 就能加载Js 非常方便,但是也存在一些问题

比如上面的加载Js的方法 修改元素的innerHTML或者修改网页标题的时候就会出现WebView白屏的情况   那么这就不是我们希望想看到的结果, 很多老铁在问我 WebView加载Js后白屏怎么处理,我会给他们另外的一种加载Js的方法 如下

方法二:

控件ID.evaluateJavascript([===[你的Js代码放这里]===],nil)

这种方法是通过WebView回调数据执行的Js,因为我们后面给的是空值nil,所以不会返回给我们什么东西,只会单纯的加载Js

那么有很多老铁就要发问了 ,回调是什么意思? 

我这里大概解释一下,就是Js代码返回给Lua数据,具体的回调用法如下 比如我们要让Js获取网页里面的标题然后返回给lua

控件ID.evaluateJavascript([[document.title]],function(a) print(a) end)
--上面的document.title就是我们的Js  意思是获取到网页的标题
--后面的print(a)就是弹出这个标题内容
--由此可见a就是回调的内容  a=标题

这里跟方法一一样都用这里很多老铁又要发问了 为啥我的这个Js没有[===[]===]括起来防止Js跟lua代码混淆

很简单因为我的这个Js只有一句话 没有混淆代码 如果你的Js非常多几百行这样子 你可以用[===[]===]括起来

没有的话也可以用[[]]、内容较少的话也可以用单引号括起来

总结:

上述两种方法都很方便,我个人习惯用第二种,那么无论是哪一种都要注意一点J需要在网页加载完毕之后执行,如果在之前执行会影响网页元素的加载顺序 导致Js无效 这里大家需要注意一下

--by壹影

发表评论

哇塞

Lv.1 @回复 沙发

我试试