WebView.InvokeScriptAsync不是通用的应用程序工作

问题描述 投票:0回答:1

我使用的是网页视图,显示了一定的HTML文件,但是,当我打电话InvokeScriptAsync,我把遇到的错误。 “未知的名称(从HRESULT异常:0x80020006(DISP_E_UNKNOWNNAME))。”出现这种情况eventhough脚本被称为NavigationComplete或DOMContentLoaded。

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

我希望能在一个单独的文件中的脚本,因为我有相当多的功能来实现,我会使用一些第三方脚本,所以它不会有维护的HTML文件中的所有脚本。

顺便说一句,我也尝试在非通用的应用程序相同的代码,只是使用了Windows 8.1商店应用,它会即使储存在一个单独的文件中的脚本正常工作。这就是为什么必须有一些设置我失踪,使这项工作在一个通用的应用程序。

这是我的代码的MainPage:

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个回答
1
投票

我找到了解决这个问题浪费我整天就可以了。它是通过在* .Shared.projitem JavaScript文件标注不正确造成的。

JavaScript文件被标记为在的ItemGroup NONE这似乎导致其无法被发现。为了使该项目可见,将其更改为内容。

 <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

© www.soinside.com 2019 - 2024. All rights reserved.