对象 com.stardust.autojs.rhino.ProxyJavaObject@13b7f3f 属性 show 的类型 "undefined" 非可调用的函数类型. (68b157a198ec5484592b3611.js#12)
TypeError: 对象 com.stardust.autojs.rhino.ProxyJavaObject@13b7f3f 属性 show 的类型 "undefined" 非可调用的函数类型.
at 68b157a198ec5484592b3611.js:12:0不发在任意地方呼出软键盘

tthhakq02l · 6 小时前
第 1 条补充
·
6 小时前

// 创建一个透明的悬浮窗
var window = floaty.rawWindow(
<frame layout_width="match_parent" layout_height="match_parent" bg="#00000000">
<input id="input" text="点击输入" />
</frame>
);

// 显示悬浮窗
window.show();

// 等待控件初始化完成
sleep(1000);

// 点击任意位置时呼出软键盘
window.onClick(function() {
// 获取输入法管理器
var inputMethodManager = context.getSystemService("input_method");
// 呼出软键盘
inputMethodManager.showSoftInput(window.input, 0);
});报错
对象 com.stardust.autojs.rhino.ProxyJavaObject@13b7f3f 属性 show 的类型 "undefined" 非可调用的函数类型. (68b157a198ec5484592b3611.js#12)
TypeError: 对象 com.stardust.autojs.rhino.ProxyJavaObject@13b7f3f 属性 show 的类型 "undefined" 非可调用的函数类型.
at 68b157a198ec5484592b3611.js:12:0
我想呼出软键盘

第 2 条补充
·
6 小时前

// 创建一个透明的悬浮窗
var window = floaty.rawWindow(
<frame layout_width="match_parent" layout_height="match_parent" bg="#00000000">
<input id="input" text="点击输入" />
</frame>
);

// 显示悬浮窗
window.show();

// 等待控件初始化完成
sleep(1000);

// 点击任意位置时呼出软键盘
window.onClick(function() {
// 获取输入法管理器
var inputMethodManager = context.getSystemService("input_method");
// 获取输入框的窗口焦点
var view = window.input;
view.requestFocus();
// 呼出软键盘
inputMethodManager.showSoftInput(view, 0);
});用了你的还一样报错对象 com.stardust.autojs.rhino.ProxyJavaObject@c1d35b7 属性 show 的类型 "undefined" 非可调用的函数类型. (68b157a198ec5484592b3611.js#12)
TypeError: 对象 com.stardust.autojs.rhino.ProxyJavaObject@c1d35b7 属性 show 的类型 "undefined" 非可调用的函数类型.
at 68b157a198ec5484592b3611.js:12:0

回答

Hamibot AI
1
· 6 小时前

根据你提供的错误信息,问题出现在尝试调用一个名为 show 的属性,但该属性的类型是 "undefined",即它不是一个可调用的函数。这通常意味着你试图调用一个不存在或未正确初始化的方法。

如果你的目标是“不发在任意地方呼出软键盘”,那么可能是你在某些地方错误地调用了类似 input.show() 或其他与输入相关的函数,而该函数并不存在或未被正确初始化。

解决方案:

  1. 检查代码中调用 show 的地方:确保你调用的 show 是一个有效的函数。例如,如果你使用的是 AutoJS 的 console 对象,应该使用 console.show() 而不是其他对象的 show 方法。
  2. 确认对象是否正确初始化:确保你操作的对象(如 console)已经正确初始化,并且具有 show 方法。
  3. 避免调用不存在的方法:如果你不需要显示软键盘,可以删除或注释掉相关代码。

示例代码:

// 正确使用 console.show() 显示控制台
console.show();

// 如果不需要显示软键盘,直接移除相关代码
// 例如,不要调用类似 input.show() 的方法

如果你能提供具体的代码片段,我可以进一步帮助你定位问题。


补充回答 1

你遇到的错误是因为 window.input 是一个 View 对象,而不是一个可以直接调用 showSoftInput 的输入框。在 AutoJS 中,要呼出软键盘,需要通过 inputMethodManager.showSoftInput() 方法,并且需要一个 IBinder 对象作为参数。

以下是修复后的代码:

// 创建一个透明的悬浮窗
var window = floaty.rawWindow(
    <frame layout_width="match_parent" layout_height="match_parent" bg="#00000000">
        <input id="input" text="点击输入" />
    </frame>
);

// 显示悬浮窗
window.show();

// 等待控件初始化完成
sleep(1000);

// 点击任意位置时呼出软键盘
window.onClick(function() {
    // 获取输入法管理器
    var inputMethodManager = context.getSystemService("input_method");
    // 获取输入框的窗口焦点
    var view = window.input;
    view.requestFocus();
    // 呼出软键盘
    inputMethodManager.showSoftInput(view, 0);
});

关键点说明:

  • window.input 是一个 View 对象,不能直接调用 showSoftInput
  • 需要先调用 requestFocus() 让输入框获得焦点。
  • 使用 inputMethodManager.showSoftInput(view, 0) 来呼出软键盘。

这段代码应该能正确呼出软键盘。如果还有问题,请提供完整的脚本内容以便进一步排查。


补充回答 2

你遇到的错误是因为 inputMethodManager.showSoftInput(view, 0) 的调用方式不正确。在 AutoJS 中,showSoftInput 方法需要一个 IBinder 对象作为第一个参数,而不是 View 对象。

正确做法:

使用 view.getWindowToken() 获取 IBinder 对象,然后调用 showSoftInput

以下是修复后的代码:

// 创建一个透明的悬浮窗
var window = floaty.rawWindow(
    <frame layout_width="match_parent" layout_height="match_parent" bg="#00000000">
        <input id="input" text="点击输入" />
    </frame>
);

// 显示悬浮窗
window.show();

// 等待控件初始化完成
sleep(1000);

// 点击任意位置时呼出软键盘
window.onClick(function() {
    // 获取输入法管理器
    var inputMethodManager = context.getSystemService("input_method");
    // 获取输入框的窗口焦点
    var view = window.input;
    view.requestFocus();
    // 获取窗口 token
    var token = view.getWindowToken();
    // 呼出软键盘
    inputMethodManager.showSoftInput(view, 0, token);
});

关键点说明:

  • view.getWindowToken() 返回的是 IBinder 对象,用于标识该 View 所在的窗口。
  • inputMethodManager.showSoftInput(view, 0, token) 是正确的调用方式,第三个参数是 token

这段代码应该能正常呼出软键盘。如果还有问题,请检查是否已获取必要的权限(如悬浮窗权限和输入法权限)。

ℹ️ 本回答由 AI 生成,内容仅供参考