gpt4 book ai didi

javascript - 使用node-webkit读取内部和外部文件

转载 作者:行者123 更新时间:2023-12-03 09:43:41 25 4
gpt4 key购买 nike

我使用 nw.js 并将以下文件压缩到 package.nw 文件中:

js/main.js
ui/widget.html
index.html
package.json

此外,我有一个随包附带的外部文件,所以我最后有这些文件:

package.nw
settings.json

package.json 配置为以 index.html 开头。在那里,我将 js/main.js 与脚本标记链接起来:

<!-- inside index.html -->
<script src="js/main.js"></script>

index.htmljs/main.js 中的代码工作完美,我已经测试过它们。

这两个有趣文件(ui/widget.htmlsettings.json分别包含完美的HTML和JSON)。

js/main.js内部,我想加载ui/widget.htmlsettings.json。为此,我尝试过:

// inside js/main.js
var fs, w1, w2;

fs = require("fs");
w1 = fs.readFileSync("ui/widget.html");
w2 = require("ui/widget.html");

结果是:

w1: "" (empty string)

w2: ERROR (Unexpected token "<")

当我更改w1的文件名时,出现错误ENOENT(没有这样的文件或目录)。所以我可以告诉,使用正确的文件名,对于 w1 该条目实际上是在包中找到的(没有 ENOENT),但内容不知何故未加载到字符串中。

w2 的错误可能是由隐式 JSON.parse()eval() 引起的,这是可以理解/可接受的。这更像是一次绝望的尝试,而不是我期望的工作。

所以,我已经尝试了几个小时,但无法读取该文件。

对于第二种情况(外部settings.json)我已经尝试过:

// inside js/main.js
var fs, s1, s2, s3;

fs = require("fs");
s1 = fs.readFileSync("settings.json");
s2 = require("settings.json");
s3 = require("settings");

对于 s1 我得到:

"" (empty string)

对于s2:

Error: Cannot find module 'settings'

对于s3:

Error: Cannot find module 'settings.json'

看起来我也无法打开该文件。我还尝试在启动 nw 之前更改目录,但无济于事。

我已经用尽了所有路径、选项、尝试和手册/教程/SO问题。在这两种不同的情况下我做错了什么?

<小时/>

我重写了一个干净的测试用例,但问题完全相同。我在使用 npm 安装的 node_modules 中省略了 fs

这是来自另一个具有完全相同问题的示例。

package.json的内容:

{
"name": "test",
"main": "index.html",
"window": {
"toolbar": false,
"width": 800,
"height": 480
}
}

index.html的内容:

<!DOCTYPE html>

<html>
<head>
<script src="main.js"></script>
</head>
<body>
</body>
</html>

main.js的内容:

"use strict";

window.onload = function () {
var fs, html;

fs = require("fs");

try {
html = fs.readFileSync("./test.html");
console.log(html); // empty string
} catch(ex) {
console.log(ex.message); // unreached
}

try {
html = require("./test.html");
console.log(html); // unreached
} catch(ex) {
console.log(ex.message); // error
}
};

test.html的内容:

<div id="widget_message">
@message
</div>

最佳答案

根据文档,当且仅当指定了第二个参数 encoding 时,fs.readFileSync() 返回一个 String。否则它返回一个缓冲区。

所以 fs.readFileSync("settings.json", "utf8") 应该可以解决问题。

关于javascript - 使用node-webkit读取内部和外部文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31104035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com