monotouch uiwebview 找不到本地 html

Posted

技术标签:

【中文标题】monotouch uiwebview 找不到本地 html【英文标题】:monotouch uiwebview cannot find local html 【发布时间】:2012-12-05 15:32:24 【问题描述】:

我正在 Monotouch 上构建一个 iPhone 应用程序。我的部分项目使用本地网站内容。我将网站使用的所有 html、js、css 和图像复制到一个文件夹中,并将其导入到我的 monotouch 项目中。我已将所有这些文件的构建选项设置为 Content。

我加载本地网页内容如下:

this.url = Path.Combine (NSBundle.MainBundle.BundlePath, "Content/index.html"); webView.LoadRequest(new NSUrlRequest(new NSUrl(this.url, false)));

问题是当我运行项目时,它找不到我的本地网站,当我尝试调试时收到以下消息:

在此服务器上找不到请求的 URL。

/Users/*****/Library/Application Support/iPhone 模拟器/4.3/Applications/092E0D85-92F4-4F4E-9CD2-3FBBCD797F76/Project.app/Content/index.html

有趣的是,当我将链接复制到 safari 时,网页显示没有任何问题

我曾多次尝试清除和重建项目,但没有任何改变。

谁能帮我解决这个问题?

我正在使用 OS X Moutain Lion 10.8.2、MonoDevelop 3.0.5、Monotouch 6.0.6、xcode 4.5.2

提前致谢

【问题讨论】:

真的在使用 MonoTouch 3.0.2 吗?那已经有几年的历史了,您不太可能再找到任何人使用它。当前(稳定)版本是 6.0.6,与 Snow Leopard 兼容的最新版本是 5.4(使用 Xcode 4.2)。 抱歉输入错误。我使用 MonoDevelop 3.0.5 和 5.x Monotouch。我正在将包括 OS X、xcode 和 Monotouch 在内的整个系统更新到最新的系统。希望它能解决问题。 我已将所有内容更新为最新版本,但这仍然是个问题。有人有这方面的经验吗? 认为当我过去这样做时,我只是使用了与我的项目根目录相关的 url。所以试试“Content/index.html” 项目视图中的 index.html 是否实际上位于名为“Content”的文件夹中(区分大小写)。文件名“index.html”全小写吗? 【参考方案1】:

这很奇怪,对我来说效果很好。

试试这个:

var fileName = "Content/index.html";
webView.LoadHtmlString (File.ReadAllText (fileName),
                        NSUrl.FromFilename (fileName));

【讨论】:

【参考方案2】:

您可以使用 NSURLComponent ,如下所示。参数可以在 NSURLComponent Query 属性中传递。

        string viewerPath = Path.Combine(NSBundle.MainBundle.BundlePath, string.Format("Content/pdfjs/web/0", _pdfViewerFileName));
        string queryString = string.Format("file=0", _pdfFilePath);
        NSUrlComponents components = new NSUrlComponents(viewerPath);
        components.Query = queryString;
        Control.LoadRequest(new NSUrlRequest(components.Url));

【讨论】:

【参考方案3】:

感谢您的帮助。

我刚刚意识到我在链接中添加了参数,例如:index.html?p1=v1&p2=v2,它使链接不起作用。如果我删除这些参数,它的工作没有任何问题。

很抱歉错过了关于我的问题的信息。

现在,如果我不能像普通网站那样做,如何将参数传递给我的本地网站?

【讨论】:

如果您需要为您的问题添加其他信息,请编辑它。添加 cmets 作为答案令人困惑。 也就是说,当您在查询字符串上传递参数时,通常在服务器(php、ASP.NET、Rails 等)上有一些东西可以解释它们并用 HTML 响应。当您在应用程序中使用本地 HTML 页面时,它们只是纯 HTML,没有发生服务器端处理。 使用javascript,我们仍然可以解析GET方法的参数。我在某处读过说使用 jQuery 我们也可以获得 POST 的参数,但我还没有测试过。 MT 的问题是他们将参数视为文件名的一部分,因此他们找不到它。我已经通过从文件名中删除参数来解决我的问题,然后使用 MT 执行 javascript 函数来传递我的参数。感谢您的所有帮助。 我也有同样的问题,有解决办法吗? @jpintor 我通过在页面名称后添加正斜杠解决了这个问题,它工作得很好,例如; index.html/?p1=v1&p2=v2【参考方案4】:

请务必将 htm 的 Build Action 设置为 BundleResource - 使用此设置的代码对我有用!

【讨论】:

以上是关于monotouch uiwebview 找不到本地 html的主要内容,如果未能解决你的问题,请参考以下文章

WebView 的方向 - Monotouch

使用 UIWebView 显示 PDF 不工作

Monotouch中的自定义UITabBar

如何在 MonoTouch 中使用 System.IO.Packaging

帮助在monotouch中绑定一个静态objective-c库

UIWebView 组件的启动时间?