为什么Java Nashorn __DIR__, __LINE__和__FILE__为空
Why Java Nashorn __DIR__, __LINE__ and __FILE__ are null?
我试图获得__DIR__
, __LINE__
和__FILE__
纳什orn全局在JavaScript文件中,由Java纳什orn引擎(JDK 8)编译和评估。
但是,它们都返回NULL…
它们是否与某些特定的Nashorn配置有关?文档中没有提到任何额外的配置来使它们工作
我知道这是一个古老的问题,但是当我想到一个简单的解决方案时,我想分享它,以帮助面临同样问题的人。
事实上,你可以很容易地有__FILE__
, __DIR__
,和__LINE__
工作,如果不做通常:
engine.eval(new FileReader("path_to_your_js"));
你实际上调用一小段JS代码来加载你的文件:
engine.eval("load('path_to_your_js')");
这是因为您可能将脚本作为字符串加载。大多数例子是这样的:
engine.eval(new FileReader("scripts/hello.js"));
那么引擎不知道这个脚本来自哪里,因为它只从FileReader获得响应。这就像调用engine.eval("print('hello')")
一样,没有文件,只是一个字符串。
如果你从控制台调用脚本,使用jjs
,它们被正确填充。
要从Java实现这一点,我目前只看到一个脏的:在上下文中将文件路径保存为字符串,并从js:
访问它。ScriptContext ctx = engine.getContext();
ctx.getBindings(ScriptContext.GLOBAL_SCOPE).put("thisFile", script);
engine.eval(new FileReader(script), defCtx);
js:
print("I am " + thisFile);
输出:I am resources/test.js
注意:但它必须是可能的,因为jdk.nashorn.tools.Shell
能够设置jdk.nashorn.internal.runtime.Context
,其中这是在全局数组中设置的
相关文章:
- 如果文本字段为空,则使用JavaScript应用CSS样式
- ReactJS映射:如何仅在url变量不为空时呈现html链接
- 如果localstorage为空,则显示欢迎消息
- 使用 jQuery 检查所有值是否为空或已填充
- 如果值为空,如何设置输入的默认值?jQuery
- 如何检查元素的内容是否为空,如果为空,请在jquery中删除该元素
- 在MVC 4中,对Controller的Ajax调用为空
- Spring Ajax列表返回,但对象为空
- 输入文本框为空时的阻止按钮asp.网络表单
- $_POST变量为空
- 如果数据为空,Ajax加载不会停止
- 边框颜色是't如果输入为空,则更改
- 如何在输入为空时停止发送
- 如果用户没有更改,则表单值为空
- 在jquery中获取文本输入val始终为空
- 即使 ng 模型有值,也使输入字段为空
- FileEntry.file方法使dataTransferItemList为空
- data.context 在 jQuery File Uploader 的文件上传进度事件上为空
- 如果值为空,则提交file=type(上传)错误
- 当使用ajax提交多部分/表单数据时,file为空