gpt4 book ai didi

javascript - 需要帮助在 SmartMobileStudio 中导入 NodeJS-Module "htmlparser2"

转载 作者:搜寻专家 更新时间:2023-10-31 23:38:51 30 4
gpt4 key购买 nike

我尝试在 SmartMobileStudio 中使用 htmlparser2 模块(通过 npm install htmlparser2 安装)。该模块本身在直接 javascript 中运行良好(使用来自 htmlparser2's Homepage 的稍微更改的示例):

var htmlparser = require("htmlparser2");
var parser = new htmlparser.Parser({
onopentag: function(name, attribs){
console.log(name);
console.log(attribs);
}
});
parser.write("<img src='image1.jpg'>");
parser.end();

使用 SMS (2.0.0.9 Beta) 我尝试像这样导入模块:

unit NodeJS.htmlparser2;

interface

uses
NodeJS.Core,
NodeJS.events;

type
TOnTag = procedure(name: string; attribs: Variant);
TOnText = procedure(text: string);

JParser = class external(NodeJS.events.JNodeEventEmitter)
procedure write(s: string);
procedure &end;
end;

Jhtmlparser_Exports = class external
public
function Parser(onopentag: TOnTag; ontext: TOnText; onclosetag: TOnTag): JParser;
end;

function htmlparser2: Jhtmlparser_Exports;

implementation

function htmlparser2: Jhtmlparser_Exports;
begin
result := Jhtmlparser_Exports( require("htmlparser2") );
end;

end.

我像这样更改了 Node.js-New-Project-Template 生成的项目:

[...]

procedure TServer.Run;
begin
var htmlparser := NodeJS.htmlparser2.htmlparser2;

var parser := htmlparser.Parser(
procedure (Name: string; Attribs: Variant)
begin
console_.log([Name]);
console_.log([Attribs]);
end,
nil,
nil);

parser.write("<img src='image1.jpg'>");
parser.end();
end;

问题是发出的代码不正确,但几乎:

[...]
parser = htmlparser.Parser(function (Name$3, Attribs) {
console_().log([Name$3].slice());
console_().log([Attribs].slice());
},null,null);
[...]

这个有效:

[...]
parser = new htmlparser.Parser({onopentag: function (Name$3, Attribs) {
console_().log([Name$3].slice());
console_().log([Attribs].slice());
}});
[...]

区别在于“new”关键字和命名事件回调“onpentag”。我需要编写什么来生成有效的 js 代码?

最佳答案

因为不能像使用 javascript 和 requirejs/nodejs 那样在 pascal 中“导出”类,所以我们需要使用外部类技巧:我们可以为外部类名设置一些代码。其次,我们需要提供一个“选项”对象(更冗长但需要类型安全)。

JParserOptions = class
onopentag : TOnTag;
ontext : TOnText;
onclosetag: TOnTag
end;

JParser = class external '(htmlparser2()).Parser' (NodeJS.events.JNodeEventEmitter)
constructor Create(options: JParserOptions);

procedure write(s: string);
procedure &end;
end;

我们可以这样使用它:

var options = JParserOptions.Create;
options.onopentag := procedure (Name: string; Attribs: Variant)
begin
console_.log([Name]);
console_.log([Attribs]);
end;

var parser := new JParser(options);

关于javascript - 需要帮助在 SmartMobileStudio 中导入 NodeJS-Module "htmlparser2",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20829836/

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