Заредете изображение за HTML img елемент от свойство JSON, докато URL адресът не е директно достъпен

Добре, това е доста сложно за обяснение, което обяснява многословното заглавие: В моето Objective C приложение генерирам JSON низ, който да съдържа всички мои свойства за обектите, които трябва да начертая в браузъра ARchitect на wikitude SDK (доколкото тъй като знам, че Wikitude SDK обработва само JSON) чрез:

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

Един конкретен обект, който ме интересува, се съхранява като низ в този JSON низ, това е URL адресът към изображение. Това изображение обаче е зад защитена с парола област на нашия уеб сървър и приложението обработва удостоверяването.

Проблемите започват, когато съм в браузъра ARchitect, който всъщност е .html файл с извиквания към специфични javascript функции на wikitude за изграждане на света на разширената реалност и показването му в UIWebView в приложението. Искам да покажа това изображение, когато се щракне върху POI в разширения изглед в изскачащия прозорец на долния колонтитул, който е основен контейнер на html div. Така че сега имам URL към ресурс за изображения на уеб сървъра, с който не мога да осъществя директен достъп

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

поради необходимото удостоверяване и единственият начин, по който успях да заредя това изображение, беше чрез метода var poiImage = new AR.ImageResource(jsonObject[i].iconURL, {onError: errorLoadingImage});, но след това мога да го покажа само в разширен изглед, но не и в долния колонтитул.

Опитах го с предоставяне на статичен низ от някое друго изображение в мрежата или към локални ресурси към img елемента в секцията за долен колонтитул в изгледа без проблеми като този: document.getElementById("thumb").src="marker.png"; и работи добре, също така изображението е правилно заредено в разширения изглед.

Прочетох за кодиране на изображението (до което мога да осъществя достъп и да го изтегля в частта object c на приложението) в base64 и съхраняването на този низ в допълнително свойство JSON, за да го заредя в свойството src на елемента html img с <img src="data:image/png;base64,BASE&$_ENCODED_DATA"></img>, но това изглежда като наистина мръсно и прекалено непрактично решение/хак за това, което се опитвам да постигна. Също така не знам дали е по-добра идея да започнете да четете как да приложите удостоверяването за достъп до това изображение в защитената зона на уеб сървъра или по-скоро да започнете да прилагате грозното кодиране base64 или да продължите да търсите алтернативи.

Не моля за решение, а по-скоро за предложения какви възможности са ми останали за достъп до това изображение. Тъй като ми свършиха идеите, всяка помощ е благодарна.

Благодаря ти!

Кратко обобщение:

  • изображението е достъпно и изтеглено в обективна c част
  • изображението е достъпно с метода AR.ImageResource на wikitude SDK (но не е необходимо)
  • изображението не може да бъде достъпно директно чрез url от javascript, защото е необходимо удостоверяване

(Надявам се, че въпросът ми е разбираем, питайте, ако нещо не е ясно, особено след като английският не е първият ми език и би било дори сложно да го обясня на немски..)


person hreimer    schedule 04.10.2012    source източник


Отговори (3)


Опитвали ли сте да изтеглите изображението в Objective-C / Cocoa, да го съхраните локално на вашето iOS устройство и да прехвърлите локалния път на изображението чрез JSON във вашия Architect World?

След това можете да заредите локалното изображение с вашия AR.ImageResouce и вашия div контейнер.

person Andreas Schacherbauer    schedule 08.10.2012
comment
това е, което най-накрая направих, тъй като това беше най-лесният и най-напред подход без предоставяне на публично място на уеб сървъра за съхраняване на изображенията или удостоверяване отново или използване на мръсни хакове за двоичен поток или дори зареждане на изображението отново. - person hreimer; 09.10.2012

Добре, нека помислим малко за това, тъй като изглежда като добра бъркотия.

Ако разбирам добре проблема ви, всичко е свързано с това, че вашият javascript код трябва да достигне до URL адрес, където се намира изображение, като не можете да го направите, защото това място изисква някакъв вид валидиране за достъп.

В този сценарий бих потърсил движещи се изображения на място извън ограничения сайт. Може би се опитвате да ги запазите от частта на object-C на едно публично място, което е достъпно с javascript. Това може да е трудно, тъй като I/O операцията може да забави изпълнението на вашия код... Разбира се, винаги ще имате опцията да преместите тези изображения точно извън ограничената зона, но предполагам, че това не е възможно както бихте могли да предположите това решение сами.

Друг начин... ако конфигурацията на вашата среда го позволява (страхувам се, че няма достатъчно информация за това по въпроса) е да се опитате да изпълните вашата javascript част (чудя се дали е затворена в уеб страница, изпълнявана от уеб сървър) с потребител с разрешения в ограничената зона. Това, разбира се, може да е напълно не-не, в зависимост от това какво прави вашата javascript част и защо вашата ограничена област е защитена от валидиране.

Ако не искате да преместите файловете, копирането им временно създава проблеми с производителността и грешки, а имитирането на потребител чрез потребителя, изпълняващ javascript, не е опция, страхувам се, че вашата уникална алтернатива е ефективно да се опитате да прехвърлите двоичен поток от данни с изображението през JSON низа... мръсно...

person Bardo    schedule 04.10.2012
comment
чудите се дали частта от javascript е на уеб страница на уеб сървър ми даде идеята да я поставя на нашия сървър в ограничената зона, за да позволя достъп до изображенията, тъй като в момента тя е само в статичен html файл..ще ви държи в течение - person hreimer; 08.10.2012
comment
Вероятно вашите потребители ще трябва да използват потребител/парола, за да достигнат до html файла на сървъра, освен ако не разрешите анонимен достъп до него или вашите потребители вече са влезли в зоната с ограничен достъп. - person Bardo; 08.10.2012

Изглежда, че wikitude поддържа 2 контекста на браузъра: хост браузъра, който е заредил вашия HTML и вграден обект, подобен на браузър (или iframe или прокси сървър), представен от екземпляра UIWebView.

Само един от тях (не е ясно кой от вашата дискусия) има потребител/пропуск за достъп до вашето изображение. Ще трябва да извикате нещо, за да повторите стъпката за удостоверяване или да прехвърлите идентификационни данни в другия контекст.

person Magicianeer    schedule 04.10.2012