【问题标题】:WebView.InvokeScriptAsync not working in universal appWebView.InvokeScriptAsync 在通用应用程序中不起作用
【发布时间】:2019-02-11 22:50:22
【问题描述】:

我正在使用 webview 来显示某个 html 文件,但是,当我调用 InvokeScriptAsync 时,我一直遇到错误。 “未知名称。(来自 HRESULT 的异常:0x80020006 (DISP_E_UNKNOWNNAME))”。即使在 NavigationComplete 或 DOMContentLoaded 中调用脚本也会发生这种情况。

我准备了一个简单的应用程序来调试这个问题,我注意到当脚本位于单独的 .js 文件中时,会发生错误。但是如果放在html文件中就不会报错了。

我希望将脚本放在一个单独的文件中,因为我有很多功能要实现,而且我会使用一些第三方脚本,因此将所有脚本都放在 html 文件中是不可维护的。

顺便说一句,我确实在非通用应用程序中尝试了相同的代码,并且只使用了 Windows 8.1 商店应用程序,即使脚本存储在单独的文件中,它也能正常工作。这就是为什么我必须缺少一些设置才能使其在通用应用程序中工作。

这是我的主页代码:

public sealed partial class MainPage : Page

{

    public MainPage()
    {
        this.InitializeComponent();
        MapWebView.NavigationCompleted +=MapWebView_NavigationCompleted;
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
            Uri url = new Uri("ms-appx-web:///Common/Web/SamplePage.html");
            MapWebView.Navigate(url);
    }

    private async void MapWebView_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
    {
        try
        {
             await MapWebView.InvokeScriptAsync("SayHello", new string[] { "Hello! This is a test parameter" });
        }
        catch(Exception e)
        {
            string error = e.Message;
        }
    }
}

不工作(脚本位于单独的文件 sample.js 中): html 文件:

<!DOCTYPE html>

    <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <script type="text/javascript" src="sample.js"></script>
        <p>Parameter From Script File:</p> <div id="paramDiv"></div>
    </body>
    </html>

sample.js 文件:

function SayHello(parameter) 
{
    document.getElementById('paramDiv').innerHTML = parameter;
}

正在工作(脚本在 html 文件中):

<!DOCTYPE html>

    <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <script>
            function SayHello(parameter) {
                document.getElementById('paramDiv').innerHTML = parameter;
            }
        </script>
        <p>Parameter From Script File:</p> <div id="paramDiv"></div>
    </body>
    </html>

这是我的项目的设置: 我将我的项目设置为通用应用程序。在通用应用程序的共享代码部分,我有以下文件

  • 通用(文件夹)
    • 网络
      • SamplePage.html
      • sample.js

【问题讨论】:

    标签: javascript c# windows-8.1 win-universal-app


    【解决方案1】:

    在浪费了我一整天之后,我找到了解决这个问题的方法。 这是由 *.Shared.projitem 中的 javascript 文件标记不正确引起的。

    JavaScript 文件在 ItemGroup 中被标记为 NONE,这似乎导致找不到它。要使其对项目可见,请将其更改为 Content。

     <ItemGroup>
        <None Include="$(MSBuildThisFileDirectory)Common\Web\sample.js" />
     </ItemGroup>
    

    请参考我也发布了解决方案的此链接。 https://social.msdn.microsoft.com/Forums/windowsapps/en-US/b29feddb-ae39-4580-9114-43839aabbcf2/webviewinvokescriptasync-not-working-in-universal-app?forum=winappswithcsharp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多