我在寻找一种方法来注册的Windows Phone 8定制协议我试图注册自定义协议WebRequest.RegisterPrefix("xxx://", this)
,但是这不会对工作WebBrowser
控件。 由于我们的协议方案没有有效的URI的应用程序将刚刚崩溃,如果尝试导航(通过location.url =“XXX://这 - 是 - 无有效-URI”)。
我希望每个人都可以扩散光的黑暗;)
编辑: 这是我的测试项目。 我认为这是一个重大的错误,因为你可以强制每一个应用程序只是一个简单的JavaScript语句崩溃。
最近我不得不创建一个自定义的URI方案,那就是在你的WMAppManifest插件很容易:
<Extensions>
<Protocol Name="XXXX" NavUriFragment="encodedLaunchUri=%s" TaskID="_default" />
</Extensions>
这是后看台Tokens
比你App.cs文件重定向到负责导航类
RootFrame.UriMapper = new CustomUriMapper();
例如
class CustomUriMapper : UriMapperBase
{
private string tempUri;
public override Uri MapUri(Uri uri)
{
tempUri = System.Net.HttpUtility.UrlDecode(uri.ToString());
if (tempUri.Contains("XXXX"))
{
return new Uri("/MainPage.xaml?parameter=XXXX", UriKind.Relative);
}
else
{
return new Uri("/MainPage.xaml", UriKind.Relative);
}
}
}
我希望我帮助
编辑
我已创建一个小的项目,我敢肯定它的工作原理,请试试这个
string url = "xxxx:";
WebBrowserTask browser = new WebBrowserTask();
browser.URL = url;
browser.Show();
我终于得到了我的问题的解决方案,你需要注册一个自己的UriParser。
我UriParser:
public class MyUriParser : UriParser
{
public MyUriParser()
{
}
protected override string GetComponents(Uri uri, UriComponents components, UriFormat format)
{
return "";
}
protected override bool IsWellFormedOriginalString(Uri uri)
{
return true;
}
protected override void InitializeAndValidate(Uri uri, out UriFormatException parsingError)
{
parsingError = null;
}
protected override bool IsBaseOf(Uri baseUri, Uri relativeUri)
{
return false;
}
protected override string Resolve(Uri baseUri, Uri relativeUri, out UriFormatException parsingError)
{
parsingError = null;
return "";
}
}
通过注册:
if (!UriParser.IsKnownScheme(SCHEMENAME_0))
UriParser.Register(new MyUriParser(), SCHEMENAME_0, 80);