注册自定义协议的Windows Phone 8应用程序WebBrowser控件(Registerin

2019-08-08 13:36发布

我在寻找一种方法来注册的Windows Phone 8定制协议我试图注册自定义协议WebRequest.RegisterPrefix("xxx://", this) ,但是这不会对工作WebBrowser控件。 由于我们的协议方案没有有效的URI的应用程序将刚刚崩溃,如果尝试导航(通过location.url =“XXX://这 - 是 - 无有效-URI”)。

我希望每个人都可以扩散光的黑暗;)

编辑: 这是我的测试项目。 我认为这是一个重大的错误,因为你可以强制每一个应用程序只是一个简单的JavaScript语句崩溃。

Answer 1:

最近我不得不创建一个自定义的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();


Answer 2:

我终于得到了我的问题的解决方案,你需要注册一个自己的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);


文章来源: Registering Custom Protocol for Windows Phone 8 App WebBrowser Control