Go无法调用JavaScript函数,因为缓冲区被引入到JavaScript代码中。

huangapple go评论86阅读模式
英文:

Go failed to call JavaScript function because buffer was introduced into JavaScript code

问题

Go调用JavaScript函数失败,因为缓冲区被引入到JavaScript代码中。

secret.js

import Buffer from 'buffer';

var Q = function(e) {
    return new Buffer("asdfl");
};

main.go

func main() {
	jsFile := "./secret.js"
	bytes, err := ioutil.ReadFile(jsFile)
	if err != nil {
		panic(err)
	}

	vm := otto.New()
	_, err = vm.Run(string(bytes))
	if err != nil {
		panic(err)
	}
	enc, err := vm.Call("Q", nil, "123456")
	if err != nil {
		panic(err)
	}
	fmt.Println(enc.String())
}

错误提示

(anonymous): Line 1:1 Unexpected reserved word

英文:

Go failed to call JavaScript function because the buffer was introduced into JavaScript code

secret.js

import Buffer from 'buffer'

var Q = function(e) {
    return new Buffer("asdfl")
};

main.go

func main() {
	jsFile := "./secret.js"
	bytes, err := ioutil.ReadFile(jsFile)
	if err != nil {
		panic(err)
	}

	vm := otto.New()
	_, err = vm.Run(string(bytes))
	if err != nil {
		panic(err)
	}
	enc, err := vm.Call("Q", nil, "123456")
	if err != nil {
		panic(err)
	}
	fmt.Println(enc.String())
}

error tips

(anonymous): Line 1:1 Unexpected reserved word

答案1

得分: 1

otto只实现了Javascript ES5,而import是ES6的一个特性,所以你不能在你的JS代码中使用import

更新:
你可以参考这篇帖子来实现自己的require方法。

英文:

otto only implemented Javascript ES5 while import is a feautre of ES6, so you couldn't use import in your JS code.

update:
You can follow this post to implement your own require method

huangapple
  • 本文由 发表于 2021年10月8日 17:36:27
  • 转载请务必保留本文链接:https://go.coder-hub.com/69493706.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定