Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 在TWebBrowser Pt中手动编写HTML。2._Delphi - Fatal编程技术网

Delphi 在TWebBrowser Pt中手动编写HTML。2.

Delphi 在TWebBrowser Pt中手动编写HTML。2.,delphi,Delphi,顾名思义,这是 这一次,我试图在我得到的HTML中添加一些自动刷新逻辑。我从几个来源拼凑了一个方法(见下文)。简而言之,我试图找到title节点并在其后面添加一个meta节点(在HTML head节点中)。但是,我遇到了访问冲突 资料来源如下: iHtmlDoc := IHTMLDocument3(WebBrowser1.Document); iHtmlEleTitle := IHTMLElement2(iHtmlDoc.getElementsByName('title').item(0, 0)

顾名思义,这是

这一次,我试图在我得到的HTML中添加一些自动刷新逻辑。我从几个来源拼凑了一个方法(见下文)。简而言之,我试图找到title节点并在其后面添加一个meta节点(在HTML head节点中)。但是,我遇到了访问冲突

资料来源如下:

iHtmlDoc := IHTMLDocument3(WebBrowser1.Document);
iHtmlEleTitle := IHTMLElement2(iHtmlDoc.getElementsByName('title').item(0, 0));
iHtmlEle := IHTMLElement2(IHTMLDocument2(iHtmlDoc).createElement(Format('<meta http-equiv="refresh" content="%d">', [1])));
iHtmlEleTitle.insertAdjacentElement('afterEnd', IHTMLElement(iHtmlEle));
iHtmlDoc:=IHTMLDocument3(WebBrowser1.Document);
ihtmletile:=IHTMLElement2(iHtmlDoc.getElementsByName('title')。项(0,0));
ihtmlelement:=IHTMLElement2(IHTMLDocument2(iHtmlDoc).createElement(格式(“”,[1]));
ihtmletile.insertAdjacentElement('afterEnd',ihtmletle(iHtmlEle));
还有一种(技术上不是功能上)不同的方式……这里的铸造略有不同:

IHTMLElement2(IHtmlDocument3(WebBrowser1.Document).getElementsByName('title').item(0, 0)).insertAdjacentElement('afterEnd', IHTMLDocument2(WebBrowser1.Document).createElement(Format('<meta http-equiv="refresh" content="%d">', [VPI_ISSUANCE_AUTO_RELOAD])));
IHTMLElement2(IHtmlDocument3(WebBrowser1.Document).getElementsByName('title').item(0,0)).insertAdjacentElement('afterEnd',IHTMLDocument2(WebBrowser1.Document).createElement(格式(“”,[VPI发行自动重新加载]);
同样,我从Delphi得到的只是一个访问异常,我查阅了有关它的MSDN文档,但现在我希望有人也经历过同样的情况,并有一些见解。有什么帮助吗

资料来源(我想这些都是): (自动重新加载)
(作为HTML文档的web浏览器文档)
(GetElementsByName)
(插入相邻元素)

(GetElementsByName)

我不知道你的AV是从哪里来的,但无论如何我会将复合表达式切割成单个的,这样你就可以检查你是否真的得到了一个接口/元素(不是零)

例如:

  iHtmlEleTitle := IHTMLElement2(iHtmlDoc.getElementsByName('title').item(0, 0));
应该像这样被打破

  iHtmlCol := iHtmlDoc.getElementsByName('title');
  if Assigned(iHtmlCol) then
    iHtmlEleTitle := IHTMLElement2(iHtmlCol.item(0, 0));

您检查iHtmlCol是否为零,如果没有找到“title”元素,它将为零

我可能会更深入地研究这件事,但我花了一两个小时来整理这些废话……老实说,我希望我做了一些非常错误的事情(在相同接口的不同版本之间进行转换)。因此,这篇文章的目的是为了节省我调试一个功能的时间,我真的无法证明花更多的时间在这个功能上是合理的。另一方面,另一个团队(生成网页的团队)似乎愿意添加自动刷新功能,所以我甚至不需要弄清楚这一点+1尽管如此,我确实打算在代码正常工作后对其进行清理。关键是,在这样的HTML文档中导航在很大程度上取决于文档的结构。你不能进入下一步,除非你确定要从某个方面开始……我明白你的意思,我分析了HTML,编写了代码,遇到了访问冲突,设置了断点,并检查了HTML是否如我预期的那样(在这个场景中有一个标题节点)。您提议的代码更改将自动执行该检查。相反,检查返回true不会告诉我任何事情,只是我没有想要的东西,正在尝试检索。所以我们又是一个完整的循环。我可以花几个小时在这上面,或者向更有经验的人寻求帮助。我选择了后者——到目前为止,似乎没有人能够或将在这方面帮助我……如果没有你的HTML,分析它的结构,知道你希望得到什么,在哪里,就很难找出问题所在。您可能在错误的位置查找Title元素。这可能是一种痛苦。我已经看到一些人放弃了HtmlDoc,只是用Pos、PosEx等解析流。