我们在应用程序嵌入浏览器的过程中,或多或少需要插入js实现一些功能。
下面介绍下CefSharp注入js的两种方法。
一、js代码量较少的情况下
string script = "function showmessage(){alert('调用了!');};";
string jscode = "var script = document.createElement(\"script\");\r\n";
jscode += "script.type = \"text/javascript\";\r\n";
jscode += $"script.text = \"{script}\";";
jscode += "document.body.appendChild(script);";
ChromeBrowser.ExecuteJavaScriptAsync(jscode);
二、代码量较多,或者代码中包含双引号等字符的情况下。可将文件保存为js文件,然后上传到服务器,使用一下方法注入
string jscode = "var script = document.createElement(\"script\");\r\n";
jscode += "script.type = \"text/javascript\";\r\n";
jscode += $"script.src = \"https://yoururl.com/test.js?v=" + getTime() + "\";\r\n";
jscode += "document.body.appendChild(script);";
ChromeBrowser.ExecuteJavaScriptAsync(jscode);
后面带的gettime是获取本地的时间戳,可以防止js缓存
如果目标站点是iframe结构的,使用以下方法可注入到指定的iframe页面
ChromeBrowser.GetBrowser().GetFrame("yourFrameName").ExecuteJavaScriptAsync(jscode);
以上就是CefSharp注入js的两种方法。
顺便说说WebBrowser注入js的方法
var tag = browser.Document.CreateElement("script");
var scriptElement = tag.DomElement as IHTMLScriptElement;
scriptElement.type = "text/javascript";//设定为Javascript
scriptElement.text = script;//设置内容
browser.Document.Body.AppendChild(tag);
指定iframe
var tag = browser.Document.Window.Frames["yourFrameName"].Document.CreateElement("script");
var scriptElement = tag.DomElement as IHTMLScriptElement;
scriptElement.type = "text/javascript";//设定为Javascript
scriptElement.text = script;//设置内容
browser.Document.Window.Frames["yourFrameName"].Document.Body.AppendChild(tag);