Open shirok1 opened 6 months ago
輸入法進程接收到的客戶端是系統的輸入法服務生成的proxy,所以能有特別的輸入優先級,也因此無法使用其他API(相信蘋果有保護隱私的考慮在)。所以你說的從根本上就無法實現
輸入法進程接收到的客戶端是系統的輸入法服務生成的proxy,所以能有特別的輸入優先級,也因此無法使用其他API(相信蘋果有保護隱私的考慮在)。所以你說的從根本上就無法實現
我尝试手动赋予输入法进程「控制其他 app 权限」确实无法生效,如果真要实现可能需要一个 helper daemon 然后与其进行 ipc
另外如果都要单独的 helper daemon 了,那可能不如直接做个浏览器插件
已经验证了通过类似 AppleScript 的进程间通信来实现的思路,不需要安装附加插件(除了 Firefox,后面会说明原因)
最简单的方法当然是直接调用 AppleScript 解释器:
Foundation
中已有NSAppleScript
,调用即可(但我没有找到“在切换 tab 时触发”等事件监听,所以可能需要轮询也可以通过
ScriptingBridge
直接用 Objective-C 写逻辑:这个
browser.h
是我根据 Arc 和 Safari 原始导出的 protocol 修改合并而来的,导出 protocol 的命令是:如果有能避免维护一个 protocol 头文件的方法是否会更好?我没写过 Objective-C,网上搜索到的
id
类型似乎仍然需要“某处”有该方法约定存在,而不能完全省略 protocol 声明Firefox 的问题是它的文档表明它需要从 document 属性获取 path 信息,但是从下面这张截图可以看到这个功能并没有做出来:
从 bugzilla 页面 来看这个问题貌似从 Firefox 3 开始有人注意到现在都没人真正弄出来……这个页面靠后的帖子提到一个 workaround 是用 插件 将 URL(默认是只有域名部分,不过对匹配网站来讲应该完全足够)放到窗口标题。AppleScript 是能正常获取到窗口标题的,因此最后就能获得当前网站。