使用场景,爬取网站内容调用js代码进行解密
用go重新写一套别人的自定义解密多累啊
万物的起源main方法
package main
import (
"github.com/dop251/goja"
)
func main() {
}
先定义两个用于获取js代码返回值的方法
// MyObject 定义一个js内部可调用的对象
func MyObject(call goja.ConstructorCall) *goja.Object {
// 设置一个改对象的方法
err := call.This.Set("get_data", getDataFunc)
if err != nil {
return nil
}
return nil
}
// getDataFunc js内部对象get_data方法实现执行的逻辑,用于获取js方法返回值
func getDataFunc(name, age string) string {
return "我叫:" + name + "\r\n年龄:" + age
}
开始执行JavaScript方法
package main
import (
"github.com/dop251/goja"
)
func main() {
vm := goja.New()
vm.Set("MyObject", MyObject) // 把方法以对象的形式映射到js中
v, err := vm.RunString( // 运行的js代码 并获取返回值
`
function myMsg() {
return ['Golang','10']
}
var msg = myMsg();
// 调用go映射进来的方法获取js返回值
var o = new MyObject();
o.get_data(msg[0],msg[1]);
`) //默认输出最后一个
if err != nil {
panic(err)
}
// 打印返回值
println(v.Export().(string))
}
控制台输出结果
我叫:Golang
年龄:10
完整代码
package main
import (
"github.com/dop251/goja"
)
func main() {
vm := goja.New()
vm.Set("MyObject", MyObject) // 把方法以对象的形式映射到js中
v, err := vm.RunString( // 运行的js代码 并获取返回值
`
function myMsg() {
return ['Golang','10']
}
var msg = myMsg();
// 调用go映射进来的方法获取js返回值
var o = new MyObject();
o.get_data(msg[0],msg[1]);
`) //默认输出最后一个
if err != nil {
panic(err)
}
// 打印返回值
println(v.Export().(string))
}
// MyObject 定义一个js内部可调用的对象
func MyObject(call goja.ConstructorCall) *goja.Object {
// 设置一个改对象的方法
err := call.This.Set("get_data", getDataFunc)
if err != nil {
return nil
}
return nil
}
// getDataFunc js内部对象get_data方法实现执行的逻辑,用于获取js方法返回值
func getDataFunc(name, age string) string {
return "我叫:" + name + "\r\n年龄:" + age
}
真好呢