我正在制作一个网络爬虫,网页上的大部分数据都是 JavaScript 对象文字形式,例如:
// Silly example
var user = {
name: 'John',
surname: 'Doe',
age: 21,
family: [
{
name: 'Jane',
surname: 'Doe',
age: 37
},
// ...
]
};
Run Code Online (Sandbox Code Playgroud)
因此,当我在 JavaScript 应用程序中搜索内容时,上面的对象将是:
"{name: 'John', surname: 'Doe', age: 21, family: [{name: 'Jane', surname: 'Doe', age: 37}]}"
Run Code Online (Sandbox Code Playgroud)
是否可以在不使用“eval”或创建自己的解析器的情况下将它们解析为常规 JavaScript 对象?我看到了其他类似的问题,但答案不适用:它们都建议JSON.parse()
(不适用)和eval
(出于安全原因我不能使用它)。例如,在这个问题中,所有答案都暗示eval
或new Function()
基本相同。
如果没有其他方法,将文字转换为正确的 JSON 然后将其解析为 JavaScript 对象是一个可行的选择吗?
这就是我现在尝试的,它适用于一个简单的对象,但我不确定它是否适用于任何地方:
const literal = script.innerText.slice(script.innerText.indexOf('{'), script.innerText.lastIndexOf('}') + 1);
const json = literal.replace(/.*:.*(\".*\"|\'.*\'|\[.*\]|\{.*\}|true|false|[0-9]+).*,/g, (prev) => { …
Run Code Online (Sandbox Code Playgroud) 我正在制作一个简单的 Javacom.sun.net.httpserver.HttpServer
来提供静态视频文件。如果我返回状态代码 206(部分内容),当我尝试通过浏览器访问它时,视频无法播放(视频在状态代码 200 下播放正常,但我希望能够查找并循环播放视频),这是我的HttpHandler
:
final String path = StaticHandler.toPathSafe(httpExchange.getRequestURI().getPath());
System.out.println(path);
final File file = new File(path);
if (file.isFile())
{
int code = 200;
long position = 0L;
long end = file.length();
if (httpExchange.getRequestHeaders().containsKey("Range"))
{
try
{
long[] range = StaticHandler.parseRange(httpExchange.getRequestHeaders().get("Range").get(0));
position = range[0];
if (range[1] != -1)
end = range[1];
// the video loads fine when code = 200;
code = 206;
httpExchange.getResponseHeaders().set("Content-Range", "bytes " + position + "-" + end + "/" + file.length()); …
Run Code Online (Sandbox Code Playgroud) 我在开发服务器上有一个非常简单的设置(两个页面都在我的本地测试服务器上localhost:5500
),其中我有一个主页
<!DOCTYPE html>
<html lang="en">
<head>
<title>Example Mockup</title>
</head>
<body>
<iframe src="./nested.html" id="frame"></iframe>
<script>
var iframe = document.getElementById('frame');
console.log(iframe.contentDocument.body);
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
和一个嵌套页面
<html>
<body>
<div id="hello">Hello, World</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中加载主页时,写入控制台的输出是:我可以使用<body></body>
访问该元素,但我想要包含子元素的 body 元素。谁能向我解释为什么会发生这种情况#hello
iframe.contentDocument.getElementById('hello')