autojs正经的交互-安卓与webview

简介: 牙叔教程 简单易懂

牙叔教程 简单易懂


效果展示



缘起


我一直觉得现在的autojs和webview交互不正经,


  • 监听弹框
  • 监听console日志
  • 监听网页title
  • 监听url


尤其是监听弹框, 直接dismiss, 那那些需要弹框的网页怎么办?


环境


Autojs版本: 9.0.4


Android版本: 8.0.0


思路


  • autojs作为发出命令方, webview作为执行命令方, 使用方法: webView.evaluateJavascript
  • webview作为发出命令方, autojs作为执行命令方, 使用方法: webView.addJavascriptInterface


你将学到以下知识点


  • 获取随机颜色
  • 改变网页背景色
  • 改变按钮背景色
  • evaluateJavascript的回调函数
  • addJavascriptInterface的回调函数
  • @JavascriptInterface注解的使用
  • java类的内部interface


代码讲解


1. 创建类JSInterface, 然后打包成dex给autojs调用
package com.yashu.simple;
import android.webkit.JavascriptInterface;
public class JSInterface {
    private JSCallback jsCallback;
    public JSInterface setJsCallback(JSCallback jsCallback) {
        this.jsCallback = jsCallback;
        return this;
    }
    @JavascriptInterface
    public void share(String callback) {
        if (jsCallback != null) {
            jsCallback.jsShare(callback);
        }
    }
    public interface JSCallback {
        void jsShare(String callback);
    }
}


2. 网页
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <script language="javascript">
      function onButtonClick() {
        function randomHexColor() {
          //随机生成十六进制颜色
          return "#" + ("00000" + ((Math.random() * 0x1000000) << 0).toString(16)).substr(-6);
        }
        let color = randomHexColor();
        jsInterface.share(color);
      }
    </script>
  </head>
  <body>
    <img
      id="image"
      width="328"
      height="185"
      src="https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png"
    />
    <button type="button" style="width: 328px; height: 185px; font-size: 40px" onclick="onButtonClick()">
      改变安卓按钮颜色
    </button>
  </body>
</html>


3. 加载dex并导入类JSInterface
let dexPath = files.path("./classes2.dex");
runtime.loadDex(dexPath);
importClass(android.webkit.JavascriptInterface);
importClass(android.webkit.WebViewClient);
importClass(android.webkit.ValueCallback);
importClass(android.webkit.WebChromeClient);
importClass(com.yashu.simple.JSInterface);


4. UI界面
ui.layout(
  <vertical>
    <text text="牙叔教程 简单易懂" textSize="28sp" textColor="#fbfbfe" bg="#00afff" w="*" gravity="center"></text>
    <webview id="webview" />
    <button id="button" text="改变网页body颜色" />
  </vertical>
);


5. 设置webview属性

let webView = ui.findById("webview");
webView.getSettings().setJavaScriptEnabled(true);


6. 设置按钮点击事件
// 发出命令方: Android
// 执行命令方: Html
// Html返回值: body背景色
ui.button.click(function () {
  function test() {
    function randomHexColor() {
      //随机生成十六进制颜色
      return "#" + ("00000" + ((Math.random() * 0x1000000) << 0).toString(16)).substr(-6);
    }
    document.body.bgColor = randomHexColor();
    return "牙叔教程, " + document.body.bgColor;
  }
  let js = test.toString() + ";test();";
  let valueCallback = new ValueCallback({
    onReceiveValue: function (value) {
      toastLog("网页返回值: " + value);
    },
  });
  webView.evaluateJavascript(js, valueCallback);
});


7.网页日志日志打印到控制台, 方便查看错误

webView.setWebChromeClient(
  new JavaAdapter(WebChromeClient, {
    onConsoleMessage: function (message) {
      message.message && log("h5: " + message.message());
    },
  })
);


8. JSInterface的使用方法
// 重点, 这里给html注册了一个全局对象: jsInterface
webView.addJavascriptInterface(new JSInterface().setJsCallback(new JSCallback()), "jsInterface");


9. 加载网页
html = files.path("./index.html");
webView.loadUrl("file://" + html);


名人名言

思路是最重要的, 其他的百度, bing, stackoverflow, 安卓文档, autojs文档, 最后才是群里问问

--- 牙叔教程


声明

部分内容来自网络

本教程仅用于学习, 禁止用于其他用途






相关文章
|
2月前
|
程序员 开发工具 Android开发
Android|WebView 禁止长按,限制非白名单域名的跳转层级
如何限制 WebView 仅域名白名单网址能随意跳转,并禁用长按选择文字。
44 2
|
6月前
|
安全 JavaScript 前端开发
kotlin开发安卓app,JetPack Compose框架,给webview新增一个按钮,点击刷新网页
在Kotlin中开发Android应用,使用Jetpack Compose框架时,可以通过添加一个按钮到TopAppBar来实现WebView页面的刷新功能。按钮位于右上角,点击后调用`webViewState?.reload()`来刷新网页内容。以下是代码摘要:
|
6月前
|
JavaScript 前端开发 Android开发
kotlin安卓在Jetpack Compose 框架下使用webview , 网页中的JavaScript代码如何与native交互
在Jetpack Compose中使用Kotlin创建Webview组件,设置JavaScript交互:`@Composable`函数`ComposableWebView`加载网页并启用JavaScript。通过`addJavascriptInterface`添加`WebAppInterface`类,允许JavaScript调用Android方法如播放音频。当页面加载完成时,执行`onWebViewReady`回调。
|
6月前
|
Web App开发 移动开发 前端开发
52. 【Android教程】网页视图:WebView
52. 【Android教程】网页视图:WebView
102 1
|
5月前
|
Web App开发 JavaScript 前端开发
Android端使用WebView注入一段js代码实现js调用android
Android端使用WebView注入一段js代码实现js调用android
140 0
|
6月前
|
安全 网络安全 API
kotlin安卓开发JetPack Compose 如何使用webview 打开网页时给webview注入cookie
在Jetpack Compose中使用WebView需借助AndroidView。要注入Cookie,首先在`build.gradle`添加WebView依赖,如`androidx.webkit:webkit:1.4.0`。接着创建自定义`ComposableWebView`,通过`CookieManager`设置接受第三方Cookie并注入Cookie字符串。最后在Compose界面使用这个自定义组件加载URL。注意Android 9及以上版本可能需要在网络安全配置中允许第三方Cookie。
|
7月前
|
XML Android开发 数据格式
安卓和webview交互
安卓和webview交互
63 0
|
7月前
|
XML Android开发 数据格式
安卓和webview交互
安卓和webview交互
106 1
|
7月前
|
JavaScript 前端开发 Android开发
android开发,使用kotlin学习WebView(详细)
android开发,使用kotlin学习WebView(详细)
539 0
|
定位技术 Android开发
[√]Android webview的url scheme
[√]Android webview的url scheme
547 0