再谈脚本注入

前面已经讲过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


本页地址:http://www.foxtable.com/webhelp/topics/6391.htm