再谈脚本注入
前面已经讲过ContentLoading和DOMContentLoaded事件注入JS脚本。
除此之外,还可以通过AddScriptToExecuteOnDocumentCreatedAsync方法注入脚本。
这个方法在ContentLoading事件触发之前执行,此时 document 对象已经存在,但 DOM
元素尚未开始解析,所以通过此方法注入的脚本可以定义函数和变量,但不能直接操作具体的 DOM 元素。。
示例一
默认情况下,你拖动一个文件到WebViewer控件,会自动打开这个文件。
如果你希望取消这种行为,可以在窗口的AfterLoad事件加上代码:
'''Async
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
Await
wv.EnsureCoreWebView2Async(Nothing)
'定义脚本
Dim
js
As
String
=
<![CDATA[
window.addEventListener('dragover', function(e) {
e.preventDefault();
}, false);
window.addEventListener('drop', function(e) {
e.preventDefault();
console.log(e.dataTransfer);
console.log(e.dataTransfer.files[0]);
}, false);
]]>.Value
Await
wv.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync(js)
'注入脚本
wv.CoreWebView2.Navigate("https://www.example.com")
示例二
例如希望取消WebViewer的右键菜单,可以在AFterLoad事件加上代码:
'''Async
Await
wv.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("window.addEventListener('contextmenu',
e => {e.preventDefault();});")
当然这里只是为了演示脚本注入,禁止右键菜单更简单的代码是:
wv.CoreWebView2.Settings.AreDefaultContextMenusEnabled =
False