Xamarin.iOS:如何使用NSUrl将查询参数添加到HTML文件?

问题描述 投票:0回答:1

我使用这个tutorial构建了一个带有混合Web视图的Xamarin.Forms应用程序。我的混合Web视图使用本地HTML文件,其中包含呈现页面的JavaScript。

现在我的本地HTML文件通过JavaScript接收查询参数,我已经使用位于Hybrid View Renderer中的这个片段在我的Xamarin.Android项目中成功实现了这个:

if (e.NewElement != null)
{
    Control.AddJavascriptInterface(new JSBridge(this), "jsBridge");
    Control.LoadUrl($"file:///android_asset/Content/{Element.Uri}");
}

其中Element.Uri包含MyFile.Html?x=1&y=2&z=3作为字符串。这将完美地加载我的本地HTML页面。

我在Xamarin.iOS项目中无法取得同样的成功。对于我的Xamarin.iOS项目,我使用位于iOS Hybrid View Renderer中的这个片段来尝试加载我的本地HTML文件:

if (e.NewElement != null)
{
    string fileName = Path.Combine(NSBundle.MainBundle.BundlePath, string.Format("Content/{0}", Element.Uri));
    NSUrl nsUrl = new NSUrl(filename, false);
    Control.LoadRequest(new NSUrlRequest (nsUrl));
}

当我运行我的应用程序时,该页面不会呈现任何内容,也不会抛出任何异常。我调试了我的代码并注意到nsUrl.AbsoluteString包含file:///path/to/MyFile.html%3Fx=1&y=2&z=3,其中查询参数开头的?已编码为%3F。我怀疑这是问题所在。

有没有办法将查询参数传递给Xamarin.iOS中的本地HTML文件?或者我采取这种方法是错误的方式?

谢谢。

xamarin xamarin.forms xamarin.ios
1个回答
0
投票

你可以使用NSUrlComponentsNSUrlQueryItem元素数组来构建你的NSUrl

Example:

using (var contentBase = NSUrl.FromFilename(Path.Combine(NSBundle.MainBundle.BundlePath, "WebSite")))
using (var url = new NSUrlComponents
{
    Scheme = "file",
    Host = "localhost",
    Path = Path.Combine(NSBundle.MainBundle.BundlePath, "WebSite", "index.html"),
    QueryItems = new[] { new NSUrlQueryItem("x", "1"), new NSUrlQueryItem("y", "2"), new NSUrlQueryItem("z", "3") }
}.Url)
{
    webView.LoadFileUrl(url, contentBase);
}

Resulting NSUrl AbsoluteString output:

file://localhost/.../some.ios.app/WebSite/index.html?x=1&y=2&z=3
© www.soinside.com 2019 - 2024. All rights reserved.