cefsharp - 在 OnContextCreated 事件中使用 ExecuteJavaScriptAsync() API 动态添加 javascript 删除 HTML HEAD 标记中的元素 (wpf cefsharp 83.4.20.0)
问题描述
我有一个进行 ActiveX 调用的网页。目前该页面是在 IE 嵌入式浏览器中加载的。现在我打算开始使用 CEF 作为嵌入式网络浏览器。我想在不修改现有代码的情况下实现这一点。
我的示例网页代码:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Test ActiveXObject</title>
</head>
<body onload="myFunction()">
<script type="text/javascript" >
function CallSampleApi()
{
var obj = new ActiveXObject("Global.Pref");
var prefs = obj.Create("Pref.myPref");
if (prefs != null ) {
return prefs.SampleAPI();
}
else {
return 'not caught';
}
}
function myFunction() {
var message = "<h1 align='center'>Browser is Chrome </h1>" +
"<table border='1' width=500>" +
"<tr bgcolor='grey'><th width=300>Function Name</th><th width=200>Result</th></tr>" +
"<tr><td>Call Sample Api</td><td align='center'>" + CallSampleApi() + "</td></tr>" +
"</table>" ;
document.write(message);
}
</script>
</body>
</html>
我正在为嵌入式 Web 浏览器使用 WPF cefsharp 库。在我的 WPF 代码中,我为此 ActiveXObject 编写了一个包装器,并在 OnContextCreated 事件中使用 ExecuteJavaScriptAsync() API 动态添加了 javascript。这工作正常。但问题是,这段代码以某种方式删除了我的 html 文件中的所有标签,这很奇怪。
public void OnContextCreated(IWebBrowser browserControl, IBrowser browser, IFrame frame)
{
if (_script != null && frame.IsMain)
{
if (frame.Url.Contains("dev")) // avoid dev tools call
string script = @"class ActiveXObject {
constructor(name) {
}
Create(nativeObj) {
switch (nativeObj) {
case 'Pref.myPref':
return new Preferences();
default:
return null;
}
}
}
class Preferences {
constructor() {
}
SampleAPI() {
return 'I am caught';
}
}";
frame.ExecuteJavaScriptAsync(script);
}
}
在cef嵌入式浏览器中加载的页面来源:
<html>
<head></head>
<body>
<h1 align="center">Browser is Chrome </h1>
<table border="1" width="500"><tbody><tr bgcolor="grey"><th width="300">Function Name</th><th width="200">Result</th></tr><tr><td>Call Sample Api</td><td align="center">I am caught</td></tr></tbody></table>
</body>
</html>
不确定如何删除 HEAD 元素。如果我从 html 页面中删除 onload 事件并在 SCRIPT 标记中移动内容,它工作正常。
解决方案
推荐阅读
- java - BackupManager requestRestore() 已弃用,有什么替代方案?
- three.js - 使用鼠标位置选择 3D 空间中的对象 (THREE.js R99)
- https - 我正在使用 iis7 托管不同的 asp.net 网站,并且在最近的窗口更新 (KB4471987) (KB4471318) http 工作后,但 https 已停止工作
- javascript - 将两个 forEach 转换为 map
- java - 删除 JSON 中出现的所有日期
- python - 如何使用 Python 3 和 PyPDF2 将 unicode 编码的 PDF 文件转换为文本
- python - 使用 python 架子存储字典对象
- qt - 可以从 Keys.onPressed 处理程序调用 JavaScript 函数,但不能从 Shortcuts onActivated 处理程序调用。为什么?
- javascript - 循环遍历动态嵌套的 javascript 对象
- python - Python中的哥德巴赫猜想