如何解决在 OnContextCreated 事件中使用 ExecuteJavaScriptAsync() API 动态添加 javascript 删除 HTML HEAD 标记中的元素 (wpf cefsharp 83.4.20.0)
我有一个进行 ActiveX 调用的网页。当前页面在 IE 嵌入式浏览器中加载。现在我打算开始使用 CEF 作为嵌入式 Web 浏览器。我想在不修改现有代码的情况下实现这一点。
我的示例网页代码:
<!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>
我将 WPF cefsharp 库用于嵌入式 Web 浏览器。在我的 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 标签中,它就可以正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。