1

好的,这个解释起来相当复杂,它解释了详细的标题:在我的 Objective C 应用程序中,我生成一个 JSON 字符串来保存我需要在 wikitude SDK 的 ARchitect 浏览器中绘制的对象的所有属性(到目前为止据我所知,Wikitude SDK 仅通过以下方式处理 JSON):

NSString *javaScript = [self convertPoiModelToJson:self.poiData.pois];
NSString *javaScriptToCall = [NSString stringWithFormat:@"newData('%@')", javaScript];

我感兴趣的一个特定对象作为字符串存储在该 JSON 字符串中,它是图像的 URL。但是,此图像位于我们的网络服务器上的密码保护区域后面,应用程序会处理身份验证。

当我在 ARchitect 浏览器中时,问题就开始了,它基本上是一个 .html 文件,其中调用了特定的 wikitude javascript 函数来构建增强现实世界并将其显示在应用程序的 UIWebView 中。我想在作为基本 html div 容器的页脚弹出窗口中单击增强视图中的 POI 时显示该图像。所以现在我有一个指向网络服务器上图像资源的 URL,我无法直接访问它

document.getElementById("thumb").src = jsonObject.thumbUrl;

由于需要身份验证,并且我成功加载该图像的唯一方法是通过该var poiImage = new AR.ImageResource(jsonObject[i].iconURL, {onError: errorLoadingImage});方法,但随后我只能在增强视图中显示它,而不能在页脚中显示它。

我尝试从网络中的其他图像或本地资源向视图的页脚部分中的 img 元素提供静态字符串,没有出现类似问题:document.getElementById("thumb").src="marker.png";它工作正常,图像也正确加载到增强视图中.

我已经阅读了关于在 base64 中编码图像(我可以在应用程序的目标 c 部分中访问和下载)并将该字符串存储在一个额外的 JSON 属性中以将其加载到 html img 元素的 src 属性中,<img src="data:image/png;base64,BASE&$_ENCODED_DATA"></img>但是这个对于我试图完成的工作来说,这似乎是一个非常肮脏且过于不切实际的解决方法/hack。另外,我不知道开始阅读有关如何实现身份验证以访问网络服务器受保护区域中的图像的更好主意,或者开始实现丑陋的 base64 编码或继续搜索替代方案是否是一个更好的主意。

我不是要寻求解决方案,而是要建议我还剩下哪些可能性来访问该图像。由于我没有想法,因此感谢您提供任何帮助。

谢谢!

简短的摘要:

  • 在目标 c 部分可访问和下载的图像
  • 可以使用 wikiitude SDK 的 AR.ImageResource 方法访问图像(但不需要)
  • 无法通过 javascript 的 url 直接访问图像,因为需要身份验证

(我希望我的问题是可以理解的,如果有什么不清楚的地方,请随时提问,特别是因为英语不是我的第一语言,用德语解释会更复杂..)

4

3 回答 3

1

好的,让我们考虑一下,因为它看起来很混乱。

如果我很好地理解了您的问题,那么一切都是关于您的 javascript 代码需要到达图像所在的 url,而无法这样做,因为该位置需要某种验证才能访问。

在这种情况下,我会寻找将图像移动到受限站点之外的地方。也许试图将它们从 Objective-C 部分保存到一个可以通过 javascript 访问的公共场所。这可能会很棘手,因为 I/O 操作可能会减慢您的代码执行速度......当然,您总是可以选择将这些图像移动到限制区域之外,但我认为这是不可行的,因为您可以通过你自己。

其他方式...如果您的环境配置允许(我担心问题上没有足够的信息)是尝试执行您的javascript部分(我想知道它是否包含在从网络服务器执行的网页中)有权进入限制区域的用户。当然,这可能完全是一个禁忌,具体取决于您的 javascript 部分的功能以及您的受限区域为何受到验证的保护。

如果您不想移出文件,暂时复制它们会导致性能问题和错误,并且通过 javascript 执行用户模拟用户不是一种选择我担心您的独特选择是有效地尝试传递二进制数据流图像通过 JSON 字符串...脏...

于 2012-10-04T16:23:12.317 回答
1

看起来 wikiitude 维护 2 个浏览器上下文:加载 HTML 的主机浏览器和由 UIWebView 实例表示的嵌入式浏览器类对象(或 iframe 或代理服务器)。

只有其中一个(从您的讨论中不清楚)具有访问您的图像的用户/通行证。您将需要调用某些东西来重复身份验证步骤或将凭据传输到其他上下文。

于 2012-10-04T16:35:35.650 回答
1

您是否尝试过在 Objective-C / Cocoa 中下载图像,将其本地存储在您的 iOS 设备上,并通过 JSON 将图像的本地路径传递到您的 Architect World 中?

AR.ImageResouce然后,您可以使用您和您的 div 容器加载本地图像。

于 2012-10-08T07:40:39.737 回答