1

Windows Phone 8のカスタムプロトコルを登録する方法を探しています。にカスタムプロトコルを登録しようとしましWebRequest.RegisterPrefix("xxx://", this)たが、これはコントロールでは機能しませんWebBrowser。私たちのプロトコルスキームは有効なURIではないため、アプリがナビゲートしようとするとクラッシュします(location.url ='xxx:// this-is-no-valid-uri'経由)。

誰もが暗闇に光を広げられることを願っています;)

編集:これがのテストプロジェクトです。単純なJavaScriptステートメントだけですべてのアプリを強制的にクラッシュさせることができるため、これは大きなバグだと思います。

4

2 に答える 2

4

最近、カスタム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();
于 2013-01-28T16:25:11.223 に答える
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);
于 2013-09-04T15:20:01.827 に答える