思源运行js并返回结果 公开

wilsons 更新于 4天11小时前 | 1 | (0) | 2
分类
点赞
JeffreyChen 1 人点赞了这个动作。
更多信息
分享人 wilsons
分享时间 4天18小时前
最后更新 4天11小时前
修订版本 2
子程序大小 14.5 KB
Quicker版本 1.43.43.0

介绍

在思源中执行js并返回运行结果

通过输入js代码,可让代码片段在思源中执行,并获取执行结果。

注意,要先在思源js代码片段中添加以下代码才行

https://gitee.com/wish163/mysoft/blob/main/%E6%80%9D%E6%BA%90/%E6%80%9D%E6%BA%90%E8%BF%90%E8%A1%8Cjs%E5%B9%B6%E8%BF%94%E5%9B%9E%E7%BB%93%E6%9E%9C.js

可参考示例动作:https://getquicker.net/Sharedaction?code=0557062c-aecb-4942-e321-08dd0733f195


------------------------------ 以下讨论涉及专业知识,新手用户可以忽略 ------------------------------

思源端代码片段部分,也可在非quicker环境通过api调用(详情可参考动作源码),比如

// 执行js
await fetchSyncPost('http://127.0.0.1:6806/api/broadcast/postMessage', {
    message: `{"action":"runjs", "code":"console.log(location);return JSON.stringify(location);", "request_id":""}`,
    channel: 'siyuan-runjs'
}) // 获取执行结果

await fetchSyncGet('http://127.0.0.1:6806/public/runjs_result_{requestId}.json')

// 清理临时文件

await fetchSyncPost('http://127.0.0.1:6806/api/broadcast/postMessage', {
    message: `{"action":"clear", "code":"", "request_id":""}`,
    channel: 'siyuan-runjs'
})

不过,由于思源提供的是基于websocket的消息广播系统,客户端之间可以通过服务端中转实现消息互发,因此如果在非quicker环境,也可以通过websocket客户端互发消息实现,更加方便。

下面这个动作就是这种方案的演示,但由于quicker回调消息机制,子程序里不能再封装子程序,因此,完整过程不好封装为子程序(参见讨论帖子),如果在非quicker环境或者自用不封装为子程序,这种方式以应该是最佳的,仅供参考。

https://getquicker.net/Sharedaction?code=325829b7-7011-47b8-1221-08dd062f9162

子程序的参数

输入
js代码 加上return,返回执行结果 Text
channel 填入思源客户端的channel,可根据自己需要修改 Text
ip Text
port Text
token 未设置访问授权码的时候可为空 Text
输出
返回结果 Text

最近更新

修订版本 更新时间 更新说明
2 4天11小时前 更新注释中的js代码地址
1 4天16小时前 增加注释,提醒用户先在思源js代码片段中添加代码
0 4天18小时前

最近讨论

暂无讨论