注入单个对象
本示例可参考示例文件"CaseStudy\WebViewer\调用Foxtable对象.Table"的窗口"注入单个对象"。
我们可以向WebViewer注入单个对象。
示例
假定我们希望在页面中右击某个元素显示一个Foxtable的快捷菜单,AfterLoad事件代码为:
'''Async
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
Await
wv.EnsureCoreWebView2Async(Nothing)
Dim
ft
As
New
FoxLib(wv)
'创建Foxtable库
wv.CoreWebView2.AddHostObjectToScript("ft",
ft)
'注入Foxtable库
wv.CoreWebView2.AddHostObjectToScript("foxmnu",
e.Form.Strips("快捷菜单1"))
'注入菜单
' 定义测试页面
Dim
html
As
String
=
<![CDATA[
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<style>
#myBox { width: 200px; height: 150px; background: red; color: white;
font-size: 16px; display: flex; align-items: center; justify-content: center; }
</style>
</head>
<body>
<div id="myBox">右击显示菜单</div>
<script>
const foxmnu = window.chrome.webview.hostObjects.sync.foxmnu;
document.addEventListener('contextmenu', function(e) {
e.preventDefault();
if (e.target.id === 'myBox') foxmnu.Show();
});
document.addEventListener('mousedown', function(e) {
if (e.button === 0 && foxmnu.Visible) foxmnu.Close();
});
</script>
</body>
</html>
]]>.Value
wv.NavigateToString(html)
这个示例导不仅注入了Foxtable的库,也注入了菜单:
wv.CoreWebView2.AddHostObjectToScript("foxmnu",
e.Form.Strips("快捷菜单1"))
前端脚本也引入了库和菜单对象
const foxmnu = window.chrome.webview.hostObjects.sync.foxmnu;
如果不单独注入菜单,我们的编码会变得比较麻烦,例如脚本中的:
foxmnu.close()
如果没有单独引入菜单的话,将不得不这样写:
ft.Forms["注入单个对象"].Strips["快捷菜单1"].Close()
只注入需要的内容
本示例只用了菜单对象,并没有使用任何其他Foxtable对象,既然用不到,那就没必要注入整个Foxtable的库,所以AfterLoad事件代码可以改为:
'''Async
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
Await
wv.EnsureCoreWebView2Async(Nothing)
wv.CoreWebView2.AddHostObjectToScript("foxmnu",
e.Form.Strips("快捷菜单1"))
'注入菜单
' 定义测试页面
Dim
html
As
String
=
<![CDATA[
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<style>
#myBox { width: 200px; height: 150px; background: red; color: white;
font-size: 16px; display: flex; align-items: center; justify-content: center; }
</style>
</head>
<body>
<div id="myBox">右击显示菜单</div>
<script>
const foxmnu = window.chrome.webview.hostObjects.sync.foxmnu;
document.addEventListener('contextmenu', function(e) {
e.preventDefault();
if (e.target.id === 'myBox') foxmnu.Show();
});
document.addEventListener('mousedown', function(e) {
if (e.button === 0 && foxmnu.Visible) foxmnu.Close();
});
</script>
</body>
</html>
]]>.Value
wv.NavigateToString(html)