gpt4 book ai didi

javascript - 为什么 Node.js 函数不返回 JSDom serializeDocument 结果?

转载 作者:行者123 更新时间:2023-11-30 05:32:17 26 4
gpt4 key购买 nike

我有充当 DNode 客户端的 PHP 脚本。然后我有 Node.js Dnode 服务器,它评估从 PHP 客户端接收的代码,并将 DOM 作为 HTML 返回。然而,Node.js 对我来说很奇怪(作为 Node.js 新手)。它不返回任何内容,即使返回的字符串不为空。我的代码如下:

PHP 客户端代码使用 DNode-PHP library :

<?php
require(__DIR__.'/../../vendor/autoload.php');
$loop = new React\EventLoop\StreamSelectLoop();
$dnode = new DNode\DNode($loop);
$dnode->connect(7070, function($remote, $connection) {
$js = 'var a = document.createElement("A");';
$js.= 'document.getElementsByTagName("body")[0].appendChild(a);'
$remote->zing($js, function($n) use ($connection) {
print_r($n);
$connection->end();
});
});
$loop->run();
?>

Node.js 服务器代码:

var dnode = require('dnode');
var jsdom = require("jsdom");
var server = dnode({
zing: function (n, cb) {
var document = jsdom.jsdom('<!DOCTYPE html>');
var window = jsdom.parentWindow;
eval(n);
var html = jsdom.serializeDocument(document);
// console.log(html);
cb(html);
}
});
server.listen(7070);

Console.log() 清楚地输出 <!DOCTYPE html><html><head></head><body><a></a></body></html>预期结果是什么。但它永远不会到达 PHP 客户端。但奇怪的是,如果我换行 cb(html);cb('test'); , PHP 输出“测试”。所以问题一定出在 Node.js 的某个地方。但我不知道去哪里寻找。

提前感谢您的任何提示。

最佳答案

您如何看待回复?通过网络浏览器?如果是这样,那么您将依赖于您在 eval(n) 中评估的任何内容来更改文档的 DOM...如果没有任何更改,那么您最终将看不到任何内容,因为除了 html/head/body 标签之外,您将拥有一个空的 DOM。值得您花时间确认您得到的是一个空的响应,而不仅仅是一个空的 DOM。

话虽这么说,eval 函数具有您想在上面声明的 document/window 上执行它的任何上下文。实际上,它只是在 node 本身的上下文中执行,而不是在您尝试创建的页面上执行。要解决此问题,请尝试使用:

window.eval(n)

如果你看一下例子创建一个类似浏览器的窗口对象
jsdom 的 Github 页面上,这将使您更好地了解如何使用这个包。

https://github.com/tmpvar/jsdom

上面的内容应该是这样的:

var document = jsdom.jsdom("<!DOCUMENT html>");
var window = document.parentWindow;

window.eval(n);

var html = jsdom.serializeDocument(document);

cb(html);

现在您将在您之前创建的 DOM 上执行 Javascript :-)

关于javascript - 为什么 Node.js 函数不返回 JSDom serializeDocument 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26114707/

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