2012-10-04 55 views
1

OK,这个人是相当复杂的解释,这解释了详细的标题: 在我的目标C应用程序,我产生一个JSON字符串来保存所有我的属性为对象,我需要通过在wikitude SDK的建筑师浏览器绘制(据我所知wikitude SDK只处理JSON):加载图像,而网址不能直接访问

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

一个特定的对象,我感兴趣的是存储在一个字符串那个JSON字符串,它是图像的URL。不过,这张图片位于我们的网络服务器上的密码保护区后面,应用程序处理身份验证。

问题出现在ARchitect浏览器中,基本上是一个.html文件,调用特定的wikitude javascript函数来构建增强现实世界并将其显示在应用程序的UIWebView中。我想在放大视图中的POI被点击在基本html div容器的页脚弹出框中时显示该图像。所以,现在我有一个URL来在Web服务器上,这是我不能直接与

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>但是这似乎是一个非常脏和过于不切实际的解决方法/黑客什么,我尽力去完成。此外,我不知道这是否是一个好主意,开始阅读有关如何实现身份验证,访问图像中的Web服务器的保护区或者说开始实施的丑恶base64编码或继续寻找替代品。

我不要求一个解决方案,而是为我所剩下的东西可能访问图像的建议。由于我用完了想法,任何帮助表示赞赏。

谢谢!

简短摘要:

  • 图像接触,并以目标部分C下载
  • 图像是与wikitude SDK的AR.ImageResource方法访问的(但不需要)
  • 图像不能被直接访问通过JavaScript的网址,因为需要身份验证

(我希望我的问题是可理解的,随意问如果有什么不清楚,特别是因为英语不是我的第一语言,它甚至会并发解释说,在德国..)

回答

1

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

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

+0

这就是我最后做的,因为它是最简单和最前沿的方法,不需要在Web服务器上提供公共场所来存储图像或再次进行身份验证,或使用脏二进制流黑客或甚至再次加载图像。 – hajn

1

好吧,让我们想一下这个,因为它似乎是一个很好的混乱。

如果我很好地理解您的问题,所有关于您的JavaScript代码需要到达图像所在的URL,无法这样做,因为那个地方需要某种验证来访问。

在这种情况下,我会寻找移动的图像到一个地方的受限制的网站。也许试图将它们从Objective-C部分保存到一个public可通过javascript访问的位置。这可能会非常棘手,因为I/O操作可能会降低您的代码执行速度......当然,您始终可以选择将这些图像移动到受限制的区域之外,但我认为这样做不可行,因为您可以认为自己解决。

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

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

+0

你想知道如果javascript部分是在网页服务器上的网页给了我这个想法,把它放在我们的服务器内的限制区域,以允许访问图像,因为现在它只是在一个静态的html文件..愿意保持更新 – hajn

+0

很可能您的用户需要使用用户名/密码才能访问服务器上的html文件,除非您启用匿名访问或您的用户已登录到禁区。 – Bardo

1

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

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