小编Fr3*_*Dev的帖子

将 JavaScript 对象字面量转换为不带“eval”的 JavaScript 对象

我正在制作一个网络爬虫,网页上的大部分数据都是 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(出于安全原因我不能使用它)。例如,在这个问题中,所有答案都暗示evalnew 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)

javascript

5
推荐指数
1
解决办法
333
查看次数

如果传输状态为 206 部分内容,Chrome 将无法加载视频

我正在制作一个简单的 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)

java google-chrome video-streaming httpserver html5-video

3
推荐指数
1
解决办法
1万
查看次数

通过 iframeElement.contentDocument.body 访问时的 iframe 主体是一个空节点

我在开发服务器上有一个非常简单的设置(两个页面都在我的本地测试服务器上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 元素。谁能向我解释为什么会发生这种情况#helloiframe.contentDocument.getElementById('hello')

html javascript iframe same-origin-policy

1
推荐指数
1
解决办法
4139
查看次数