javascript - 使用 J2V8 时出现异常:SyntaxError: Cannot use import statement outside a module
问题描述
我想在我的 android 应用程序中使用 j2v8 来运行用 js 编写的现有代码。
现有的 js 文件有十多个,它们互相调用。
当我编写单个测试 js 文件并执行代码时,它运行良好,但是当我想运行实际的 js 文件时,它会抛出异常并且应用程序退出。
使用 j2v8 的代码如下所示:
V8 runtime = V8.createV8Runtime();
String jsContent = getFileContent("security/security.js", this.getBaseContext());
runtime.executeModule(jsContent, "", "", "file:///android_asset/security/");
Object obj = runtime.executeJSFunction("initPrepare");
运行executeModule方法时应用程序退出,我尝试了executeScript和executeVoidScript方法,都失败了。
错误消息如下所示:
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.testapplication, PID: 26701
java.lang.IllegalStateException: Could not execute method for android:onClick
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:414)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: file:///android_asset/security/:1: SyntaxError: Cannot use import statement outside a module
import * as Crypto from "./jahport-crypto-wrapper.js";
^^^^^^
com.eclipsesource.v8.V8ScriptCompilationException
at com.eclipsesource.v8.V8._executeScript(Native Method)
at com.eclipsesource.v8.V8.executeScript(V8.java:1134)
at com.eclipsesource.v8.V8.executeModule(V8.java:737)
at com.example.testapplication.MainActivity.jsTest(MainActivity.java:72)
... 13 more
I/Process: Sending signal. PID: 26701 SIG: 9
Disconnected from the target VM, address: 'localhost:63197', transport: 'socket'
我已经在 google 中搜索了错误消息,我能找到的所有答案都是即将在标签中添加“type=module”,但我使用的是 js 文件并且它没有标签。
谁能帮我这个?使用 j2v8 或不使用 j2v8 解决此问题的任何方法,我只想在我的应用程序中运行 js 文件,无论如何。
解决方案
推荐阅读
- sql - SSIS 数据质量控制方法
- python - 我怎样才能让所有的背景移动而不是只移动一个平台?
- c# - 发布/订阅消息在生产中丢失
- javascript - Typescript 接口中的输入类型
- jquery - jQueryEasyUI:如何重新加载组合网格?
- python - 如果每个数字旁边都有一个字符串,我如何使用此代码查找文件中的前 5 个最大数字?
- laravel - Laravel Nova - 范围关系字段
- bash - kafka-console-producer:找不到命令
- javascript - 在 vue.js 中呈现应用程序之前加载微调器
- r - 如何在 geom_boxplot 中定义我自己的陷波间隔?