打包应用程序时,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"/>
以下是我尝试过的方法:
- 我创建了一个 WinRT 应用,仅 包含网络视图和嵌入式 HTML 页面。功能在构建时有效,但在打包时无效。
- 我创建了一个 仅 包含网络视图和嵌入式 HTML 页面的 UWP 应用程序。功能在构建时有效,但在打包时无效。
- 我尝试按照描述使用命令行在 Visual Studio 之外打包应用程序 here. 该功能不起作用。
- 我尝试使用不同版本的 Visual Studio 2015。结果相同。
- 我在不同的机器上试过 building/packaging。相同的结果。
- 我试图导航到 google 而不是本地主机。有效。
- 我试图导航到另一个 html 文件而不是本地主机。有效。
- 当然,我也尝试了一些显而易见的事情,比如清理、更改包名称、更改 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;我怀疑这与问题有关。
天哪,我真的很纠结这个问题!
所以我有一个 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"/>
以下是我尝试过的方法:
- 我创建了一个 WinRT 应用,仅 包含网络视图和嵌入式 HTML 页面。功能在构建时有效,但在打包时无效。
- 我创建了一个 仅 包含网络视图和嵌入式 HTML 页面的 UWP 应用程序。功能在构建时有效,但在打包时无效。
- 我尝试按照描述使用命令行在 Visual Studio 之外打包应用程序 here. 该功能不起作用。
- 我尝试使用不同版本的 Visual Studio 2015。结果相同。
- 我在不同的机器上试过 building/packaging。相同的结果。
- 我试图导航到 google 而不是本地主机。有效。
- 我试图导航到另一个 html 文件而不是本地主机。有效。
- 当然,我也尝试了一些显而易见的事情,比如清理、更改包名称、更改 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;我怀疑这与问题有关。