注入单个对象

本示例可参考示例文件"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)



 


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