首页 > 解决方案 > 如何使用 VB.Net WebView 控件加载本地脚本?

问题描述

我开发了一个WebViewWinFormusing中使用 a 的应用程序VB.NET

中显示的 HTML 代码WebView是使用代码动态生成的VB.NET

    wvSelect.Settings.IsScriptNotifyAllowed = True
    wvSelect.Settings.IsJavaScriptEnabled = True
    wvSelect.NavigateToString(sHtmlText)

其中sHtmlText包含 HTML 标记和值。

这工作得很好。

我的 HTML 字符串是在模块中生成的

    Public eHtml =
<html>
    <head>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
        <script type="text/javascript">
            // script (see code below)
        </script>
        <style type="text/css">

这是可行的,但是每次我编写<字符时 Javascript 代码都会崩溃,并且 Javascript 代码的颜色格式不是最佳的。

我知道我可以使用

<script type="text/javascript"> 
// <![CDATA[

// ]]>
</script> 

这适用于<>字符,但颜色格式非常糟糕。

所以,我决定将我所有的Javascript代码移到.JS文件中。

我的 HTML 现在看起来像这样

    Public eHtml =
<html>
    <head>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
        <script src="file:///D:/Documents/app.js"></script>

        <style type="text/css">

因为,我做了这个改变,在 WebView 中显示的内容与我之前获得的不同!

我想那个.JS文件没有被调用,没有找到或者别的什么。

您必须知道,在加载 HTML 字符串之前WebView,我将其保存在 .HTML 文件中。

当我双击这个 .HTML 文件时,Chrome加载它并且显示的内容是正确的。

仅当 HTML 字符串显示在 WebView 上时,才会出现此问题。

如您所见,我在导入 JQuery 脚本时没有任何问题。此问题仅适用于LOCAL脚本。

有关信息,我的 Javascript 文件包含以下几行(我删除了一些行)
这只是为了表明使用了 JQuery。

var eUnicode;
var iCounter = 0;
var eDraggable;

$(document).ready(function () {
    $('.button').attr('draggable', 'True');

    $('.digit').click(function (ev) { clickDigit(ev); });

    $(".button").click(function (ev) {
        clickButton(ev.target);
    });

    showFirstTab();
});

function clickButton(eButton) {
    var sName = event.srcElement.innerText;
    hideAllOnglets();
    eButton.style.background = "orange";
    showOnglet(sName);
}

function showTab(sName) {
    var eOnglet = document.getElementById(sName);
    eOnglet.style.display = "block";
}

有人已经遇到并解决了这个问题吗?

标签: javascriptvb.netimportwebviewlocal

解决方案


我已经使用嵌入式文件(VB.Net Resource)解决了我的问题。

该技术更安全,因为用户无法在安装位置修改嵌入文件。

Javascript.js 文件位于我的应用程序文件/文件夹树中,并已embedded resourceBuild Action属性中定义,如如何将 .jpg 包含到 dll 中所述? .

我不使用<script src='location'>标记,因为它不起作用,还因为 HTML 字符串已经从我的代码动态构建用于其他部分。

我的 VB.Net 代码如下

Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim reader As StreamReader
    Dim ass As Assembly = Assembly.GetExecutingAssembly()

    sHtmlText = eHtml.ToString()
    sHtmlText = sHtmlText.Replace("(%-ONGLET-%)", sOngletText)
    sHtmlText = sHtmlText.Replace("(%-TABLE-%)", sTableText)

    reader = New StreamReader(ass.GetManifestResourceStream("UnicodeInput.JavaScript.js"))
    Dim sScriptText = reader.ReadToEnd()
    reader.Close()
    sHtmlText = sHtmlText.Replace("(%-SCRIPT-%)", sScriptText)

    reader = New StreamReader(ass.GetManifestResourceStream("UnicodeInput.StyleSheet.css"))
    Dim sStyleText = reader.ReadToEnd()
    reader.Close()
    sHtmlText = sHtmlText.Replace("(%-STYLE-%)", sStyleText)

    wvSelect.Settings.IsScriptNotifyAllowed = True
    wvSelect.Settings.IsJavaScriptEnabled = True
    wvSelect.NavigateToString(sHtmlText)

    Dim file As System.IO.StreamWriter
    file = My.Computer.FileSystem.OpenTextFileWriter("output.html", False)
    file.Write(sHtmlText)
    file.Close()

正如你所看到的,我对 CSS 文件做了同样的改进,我发现这个文件有一些错误!

我的“伪”HTML代码如下

<html>
    <head>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<!--
        <script type="text/javascript" src="./app.js"></script>
        <script type="text/javascript" src="file:///D:/Documents/+Informatique/Application/@Visual Basic.NET/UnicodeInput/app.js"></script>
        <script src="file:///D:/Documents/app.js"></script>
-->
        <script type="text/javascript">
            (%-SCRIPT-%)
        </script>

        <style type="text/css">
            (%-STYLE-%)
        </style>
    </head>
    <body>
        <div id="onglet">
            <div class='button'>Keyboard</div>
(%-ONGLET-%)
            <div class='button' onclick="GetNewCmdFile()">*ADD</div>
        </div>

评论中的内容是我已经尝试过的,它在 WinForm VB.Net WebView 中不起作用,但在 Chrome 上的纯 HTML 中完美运行。


推荐阅读