使用场景,爬取网站内容调用js代码进行解密
用go重新写一套别人的自定义解密多累啊
万物的起源main方法
package main
import (
"github.com/dop251/goja"
)
func main() {
}
先定义两个用于获取js代码返回值的方法
func MyObject(call goja.ConstructorCall) *goja.Object {
err := call.This.Set("get_data", getDataFunc)
if err != nil {
return nil
}
return nil
}
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)
v, err := vm.RunString(
`
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)
v, err := vm.RunString(
`
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))
}
func MyObject(call goja.ConstructorCall) *goja.Object {
err := call.This.Set("get_data", getDataFunc)
if err != nil {
return nil
}
return nil
}
func getDataFunc(name, age string) string {
return "我叫:" + name + "\r\n年龄:" + age
}
评论 (0)