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

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

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

问题

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

secret.js

  1. import Buffer from 'buffer';
  2. var Q = function(e) {
  3. return new Buffer("asdfl");
  4. };

main.go

  1. func main() {
  2. jsFile := "./secret.js"
  3. bytes, err := ioutil.ReadFile(jsFile)
  4. if err != nil {
  5. panic(err)
  6. }
  7. vm := otto.New()
  8. _, err = vm.Run(string(bytes))
  9. if err != nil {
  10. panic(err)
  11. }
  12. enc, err := vm.Call("Q", nil, "123456")
  13. if err != nil {
  14. panic(err)
  15. }
  16. fmt.Println(enc.String())
  17. }

错误提示

(anonymous): Line 1:1 Unexpected reserved word

英文:

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

secret.js

  1. import Buffer from 'buffer'
  2. var Q = function(e) {
  3. return new Buffer("asdfl")
  4. };

main.go

  1. func main() {
  2. jsFile := "./secret.js"
  3. bytes, err := ioutil.ReadFile(jsFile)
  4. if err != nil {
  5. panic(err)
  6. }
  7. vm := otto.New()
  8. _, err = vm.Run(string(bytes))
  9. if err != nil {
  10. panic(err)
  11. }
  12. enc, err := vm.Call("Q", nil, "123456")
  13. if err != nil {
  14. panic(err)
  15. }
  16. fmt.Println(enc.String())
  17. }

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:

确定