打包应用程序时,WinRT 和 UWP WebView localhost url 不会触发

WinRT & UWP WebView localhost url doesn't fire when app is packaged

天哪,我真的很纠结这个问题!

所以我有一个 WinRT Metro 应用程序,它有一个 HTML 网页嵌入到应用程序的 Web 视图中。在 HTML 页面中有一个 div,其中包含指向本地主机 url 的 href。我正在使用此本地主机调用与正在本地主机端口上侦听此 url 的 .NET 桌面应用程序进行通信。

当我在 Visual Studio(2015 年,更新 1 或 2)中构建应用程序(作为调试或发布)时,应用程序按预期工作。我可以点击 div,触发 url,通信成功。

但是,当我打包应用程序并将其旁加载到我的机器上时,该功能无法按预期运行。我可以单击 div...但是 url 永远不会被触发。

HTML Url 示例 ([...] = 代码已删除):

<a href="http://localhost:8123/?Api [...] >Click here</a>

代码隐藏导航到 HTML 示例:

this.webView.Navigate(new Uri("ms-appdata:///local/index.html"));

XAML Webview 实例化:

<WebView x:Name="webView" Grid.Row="1" ScriptNotify="webView_ScriptNotify" Grid.Column="1" Visibility="Collapsed"/>

以下是我尝试过的方法:

  1. 我创建了一个 WinRT 应用, 包含网络视图和嵌入式 HTML 页面。功能在构建时有效,但在打包时无效。
  2. 我创建了一个 包含网络视图和嵌入式 HTML 页面的 UWP 应用程序。功能在构建时有效,但在打包时无效。
  3. 我尝试按照描述使用命令行在 Visual Studio 之外打包应用程序 here. 该功能不起作用。
  4. 我尝试使用不同版本的 Visual Studio 2015。结果相同。
  5. 我在不同的机器上试过 building/packaging。相同的结果。
  6. 我试图导航到 google 而不是本地主机。有效。
  7. 我试图导航到另一个 html 文件而不是本地主机。有效。
  8. 当然,我也尝试了一些显而易见的事情,比如清理、更改包名称、更改 Visual Studio App Packager 中的设置、重新启动、删除引用等。

有没有人遇到过这种情况?这似乎是打包过程中的某种错误。欢迎任何suggestions/tips/answers!谢谢!

以防万一你想知道,这个应用程序仅供我工作的公司内部使用,不会上传到 Windows 商店。

通常,您无法在 UWP 商店应用程序中打开环回连接。句号。如果你是旁加载,或者在企业环境中,有一个解决方法:

https://msdn.microsoft.com/en-us/library/windows/apps/dn640582.aspx

我遇到了一个与此非常相似的问题,值得分享我的经验。

我的应用程序是一个带有 WebView 控件的通用应用程序。 WebView 源是应用程序包中的一个文件。我在 XAML 中定义我的 WebView 如下。

<WebView x:Name="myWebview" Source="ms-appx-web:///Assets/www/mylocalwebpage.html"/>

在调试模式下,这非常有效。在 Release 模式下的第一个 运行 中,它不会加载页面。在 Release 模式应用程序的所有后续 运行 中,它都能完美运行。这是一个可重现且令人难以置信的错误。

我的解决方法简单但有效。一秒钟后,我使用计时器设置 webview 的源。我在下面添加以下行 this.InitializeComponent();

// this worksaround a bug: on first launch in release mode the webview doesn't load
loadWebviewTimer = new Timer(loadWebview, null, 1000, Timeout.Infinite);

然后是另一个

private async void loadWebview(object state)
    {
        await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
        {
            myWebview.Navigate(new Uri("ms-appx-web:///www/mylocalwebpage.html"));
        });
    }

这不是一个很好的解决方案,但它确实有效。有趣的是,mylocalwebpage.html 里面有很多 javascript;我怀疑这与问题有关。