注册时间
最后登录
新帖
发布在 技术交流 阅读更多

需要修改文件 -----.vscode\extensions\aaroncheng.auto-js-vsce-fixed-1.109.0\out\extension.js
类Extension(98行-135行)中的内容

class Extension {
    constructor() {
        this.documentViewPanel = undefined;
        this.qrCodeViewPanel = undefined;
        this.documentCache = new Map();
    }

    showServerAddress() {
        let servers = server.getIPs().join(":" + server.getPort() + " or ") + ":" + server.getPort();
        vscode.window.showInformationMessage(`Auto.js Autox.js \r\n server running on ${servers}`);
    }

    showQrCode() {
        let ips = server.getIPs();
        if (ips.length == 1) {
            this.showQrcodeWebview(ips[0]);
        } else {
            vscode.window.showQuickPick(ips).then(ip => {
                this.showQrcodeWebview(ip);
            });
        }
    }

    showQrcodeWebview(ip) {
        let url = `ws://${ip}:${server.getPort()}`;
        if (!this.qrCodeViewPanel) {
            this.qrCodeViewPanel = vscode.window.createWebviewPanel('Qr code', "Qr code", vscode.ViewColumn.Beside, {
                enableScripts: true,
            });

            this.qrCodeViewPanel.onDidDispose(() => {
                this.qrCodeViewPanel = undefined;
            }, undefined, exports._context.subscriptions);
        }
        this.qrCodeViewPanel.webview.html = this.getQrCodeHtml(this.qrCodeViewPanel.webview, url);
    }

    getQrCodeHtml(webview, text) {
        const icon = this.getVscodeResourceUrl(webview, "logo.png");
        const qrcodejs = this.getVscodeResourceUrl(webview, "assets/qrcode.js");
        return `<!DOCTYPE html>
    getVscodeResourceUrl(webview, relativePath) {
        const onDiskPath = vscode.Uri.file(path.join(exports._context.extensionPath, relativePath));
        return webview.asWebviewUri(onDiskPath);
    }
发布在 bug、问题、建议 阅读更多

错误存在页:http://doc.autoxjs.com/#/ui?id=输入框控件-input
d62d8968-b2d6-494b-969c-ac9fcfcd5377-图片.png
图中EditText超链接已失效,跳转为一软件商。

发布在 bug、问题、建议 阅读更多

将点击事件改成赋值之类简短无循环的内容后解决。

// 给停止按钮添加点击事件
w.stop.setOnClickListener(function() {
    // 执行停止操作
    toast('停止操作');
    exit(); // 退出脚本
});

// 给开始按钮添加点击事件
w.start.setOnClickListener(function() {
    // 执行开始操作
    toast('开始操作');
    
    // 进行连续点击,这里是点击30次
    for(let i = 0; i < 30; i++) {
        let rxc1 = centerX + Math.random() * 10 - 5;
        let ryc1 = centerY + Math.random() * 10 - 5;
        let rxc2 = centerX + Math.random() * 10 - 5;
        let ryc2 = centerY + Math.random() * 10 - 5;
        click(rxc1, ryc1);
        click(rxc2, ryc2);
        sleep(500);
    }
});

改为

// 悬浮窗的开始按钮点击事件
w.start.click(()=>{
    // 点击开始,给i赋值1并执行console.log
    i = 1;
    console.log("i的值是" + i);
});

// 悬浮窗的停止按钮点击事件
w.stop.click(()=>{
    // 点击停止,给i,h赋值0并执行console.log
    i = 0;
    h = 0;
    console.log("i的值是" + i);
});
发布在 bug、问题、建议 阅读更多

AI [GPT-4 (8K)]:

看起来你在尝试使用Auto.js运行一个脚本,但遇到了一些问题。你的脚本在创建和管理一个悬浮窗口,并模拟某些点击事件。然而,在脚本运行过程中发生了一个错误,Fragment ScriptListFragment{2959361} (c8b3c385-d4c4-4fee-9f76-816591b841dc)不再附着于上下文。
java.lang.IllegalStateException 是一个运行时异常,在处理非法状态操作时可能会抛出。在这里,它表示你试图使用一个Fragment,而这个Fragment并没有附加在正确的Context(上下文)上,这通常意味着Fragment已经从Activity中分离或者尚未与Activity关联,但你仍然试图在其中执行某些操作。

可能的解决方案:

确保在Fragment的生命周期中正确地使用Context。确保你没有在Fragment的onDetach()方法之后调用requireContext()方法,因为在onDetach()之后,Fragment不再与其所需的上下文相关联,因此会抛出IllegalStateException。你可以使用getContext()代替requireContext(),以防止此类错误。
确保Fragment已经与Activity关联,才调用requireContext()。你可以在onAttach()方法中设置一个标志,然后检查这个标志,如果Fragment已经附着在上下文上,再进行后续操作。
发布在 bug、问题、建议 阅读更多

脚本:

// 检查悬浮窗权限
if (!floaty.checkPermission()) {
    // 没有悬浮窗权限,提示用户并跳转请求
    toast("本脚本需要悬浮窗权限来显示悬浮窗,若已禁止请在随后的界面中允许并重新运行本脚本。");
    floaty.requestPermission();
    exit();
} else {
    toastLog('已有悬浮窗权限');
}

// 获取设备屏幕的宽度和高度
var screenWidth = device.width;
var screenHeight = device.height;

// 计算中心坐标
var centerX = screenWidth / 2;
var centerY = screenHeight / 2;

// 创建悬浮窗口
var w = floaty.window(
    <frame gravity="center">
      <vertical>
        <button id="start" text="开始"/>
        <button id="stop" text="停止"/>
      </vertical>
    </frame>
);

// 设置窗口大小和初始位置
w.setSize(170, 400);
w.setPosition(0, 500);
w.exitOnClose();


// 给停止按钮添加点击事件
w.stop.setOnClickListener(function() {
    // 执行停止操作
    toast('停止操作');
    exit(); // 退出脚本
});

// 给开始按钮添加点击事件
w.start.setOnClickListener(function() {
    // 执行开始操作
    toast('开始操作');
    
    // 进行连续点击,这里是点击30次
    for(let i = 0; i < 30; i++) {
        let rxc1 = centerX + Math.random() * 10 - 5;
        let ryc1 = centerY + Math.random() * 10 - 5;
        let rxc2 = centerX + Math.random() * 10 - 5;
        let ryc2 = centerY + Math.random() * 10 - 5;
        click(rxc1, ryc1);
        click(rxc2, ryc2);
        sleep(500);
    }
});

//保持悬浮窗存在
setInterval(() => {}, 1000);

设备信息:

App version: 6.5.7
App version code: 657
Android build version: V12.5.21.0.R
Android release version: 11
Android SDK version: 30
Android build ID: RP1A.200720.011
Device brand: Redmi
Device manufacturer: Xiaomi
Device name: dandelion
Device model: M2006C3LC
Device product name: dandelion
Device hardware name: mt6762
ABIs: [armeabi-v7a, armeabi]
ABIs (32bit): [armeabi-v7a, armeabi]
ABIs (64bit): []

错误信息:

java.lang.IllegalStateException: Fragment ScriptListFragment{2959361} (c8b3c385-d4c4-4fee-9f76-816591b841dc) not attached to a context.
androidx.fragment.app.Fragment.requireContext(Fragment.java:900)
org.autojs.autojs.ui.main.scripts.ScriptListFragment$explorerView$2.invoke(ScriptListFragment.kt:55)
org.autojs.autojs.ui.main.scripts.ScriptListFragment$explorerView$2.invoke(ScriptListFragment.kt:55)
kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
org.autojs.autojs.ui.main.scripts.ScriptListFragment.getExplorerView(ScriptListFragment.kt:55)
org.autojs.autojs.ui.main.MainActivity$onCreate$1$1$1$permission$1.invoke(MainActivity.kt:91)
org.autojs.autojs.ui.main.MainActivity$onCreate$1$1$1$permission$1.invoke(MainActivity.kt:89)
org.autojs.autojs.ui.main.MainActivityKt$rememberExternalStoragePermissionsState$1.invoke(MainActivity.kt:246)
org.autojs.autojs.ui.main.MainActivityKt$rememberExternalStoragePermissionsState$1.invoke(MainActivity.kt:240)
com.google.accompanist.permissions.MutableMultiplePermissionsStateKt$rememberMutableMultiplePermissionsState$launcher$1.invoke(MutableMultiplePermissionsState.kt:61)
com.google.accompanist.permissions.MutableMultiplePermissionsStateKt$rememberMutableMultiplePermissionsState$launcher$1.invoke(MutableMultiplePermissionsState.kt:57)
androidx.activity.compose.ActivityResultRegistryKt$rememberLauncherForActivityResult$1.invoke$lambda-0(ActivityResultRegistry.kt:106)
androidx.activity.compose.ActivityResultRegistryKt$rememberLauncherForActivityResult$1.$r8$lambda$dCDOHypJPJiF_gC4kcw2C1QNWFU(Unknown Source:0)
androidx.activity.compose.ActivityResultRegistryKt$rememberLauncherForActivityResult$1$$ExternalSyntheticLambda0.onActivityResult(Unknown Source:2)
androidx.activity.result.ActivityResultRegistry.dispatchResult(ActivityResultRegistry.java:406)
androidx.activity.ComponentActivity$2$1.run(ComponentActivity.java:188)
android.os.Handler.handleCallback(Handler.java:938)
android.os.Handler.dispatchMessage(Handler.java:99)
android.os.Looper.loop(Looper.java:236)
android.app.ActivityThread.main(ActivityThread.java:7912)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)

运行脚本后,按钮正常出现;点击“”停止“后,正常退出;点击“开始”后,过一段时间autox.js停止运行,出现如上报错(将sleep换成setTimeout还是这样)。