关于Silverlight:如何从Web浏览器Windows Phone打开应用程序

How to open application from a webbrowser windows phone

我正在开发Windows Phone应用程序。
在页面中,我放置了一个按钮,然后单击该按钮,我打开了网络浏览器,并重定向到我们的网站页面以进行某些处理。有很多网页。在上一个网页中,我们添加了一个按钮"关闭"。在关闭按钮中,单击我要关闭Web浏览器,然后在打开Web浏览器之前以最后一个状态打开应用程序。我该怎么办?

谢谢。


我将应用程序中的按钮称为"应用程序按钮",并将网页中的按钮称为"关闭按钮"。

将名为webBrowser1的WebBrowser控件添加到Windows Phone应用程序。使它覆盖整个屏幕,并将其"可见性"属性设置为"已折叠"。

在应用程序按钮的点击事件上,使用

1
2
webBrowser1.Visibility = System.Windows.Visibility.Visible;
webBrowser1.Navigate(new Uri("http://yourwebsite.com/page");

显示网络浏览器并将其导航到您网站的第一页。

使网站最后一页上的关闭按钮导航到网站上的新页面,称为" close.html"或您想要的任何页面。在javascript中,这看起来像

1
<Button onclick="window.location.href='http://yourwebsite.com/close.html';">

返回应用程序:在webBrowser1的导航事件上,

1
2
3
4
if (e.Uri.ToString().Contains("close.html"))
{
    webBrowser1.Visibility = System.Windows.Visibility.Collapsed;
}

当您单击站点最后一页上的按钮时,它将导航到" close.html"。发生这种情况时,将触发Web浏览器的"导航"事件。由于每次更改页面都会触发此事件,因此您需要检查新网址是否包含" close.html",即您的关闭按钮导航到的页面。如果是这样,Web浏览器将被隐藏,您将再次看到您的应用程序。

(在VB中,代码为)

1
2
webBrowser1.Visibility = System.Windows.Visibility.Visible
webBrowser1.Navigate(New Uri("http://yourwebsite.com/page")

1
2
3
If e.Uri.ToString.Contains("close.html")
    webBrowser1.Visibility = System.Windows.Visibility.Collapsed
End If

编辑:当我写答案时,我想的是通用术语,不记得您是专门询问Web浏览器的(因此,使用webbrowsertask启动器)。感谢@Claus指出OAuth的情况。因此,我正在修正我的回答,以解释这是可能的,并且还提到了使用启动器的问题,因为无法保证返回到启动器应用程序中的给定点(由于选择器的可用性,选择器也是如此)回调)。

不可能从总体上实现这一目标。也就是说,有一个应用程序A可以打开另一个应用程序B,而您想从应用程序B中关闭它并打开A。我认为这是不可能的,原因有很多:
-如何获取到应用程序A的地址/引用。目前没有API。
-没有第三方可以在网络浏览器中注册应用的内容处理程序/插件。
-最重要的是,安全性,安全性,安全性。这将打开来自网络攻击的大门。

但是,对于您的应用程序B是Web浏览器的要求,可以使用任务启动器WebBrowserTask。正如@claus所建议的那样,您可以在最后一页中使用Window.close() javascript来关闭浏览器,从而显示其下方的应用程序(希望是A)。这里的问题是,如果用户在浏览器启动后(并且在关闭浏览器之前)打开了一个应用程序(简称为C),并且用户没有关闭C,那么当浏览器关闭时,用户将返回到C而不是启动器应用程序!根据您的要求,这不是您想要的。

因此,如果您想获得在问题中描述的那种效果,最好将Web浏览器嵌入到您的应用程序(作为全屏应用程序)中,并从该angular出发通过Javascript在Web浏览器(控件)和(主机)应用程序之间进行交互。

希望这会有所帮助。