Hlavní menu
Hlavní stránka Seznam rubrik Download Weblinks Ankety Top 15

  Kalendář
<<  Září  >>
PoÚtStČtSoNe
 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30     

Jak načíst na web soubor přiložený ve PhoneGap balíku
Datum vydání: 29. 10. 2013 (3546 přečtení)

Situace je následující: Máte vlastní PhoneGap aplikaci (nebo jen aplikaci využívající knihovnu Apache Cordova), která zobrazuje obsah vašeho webu. Ale chcete na stránce zobrazit soubor, který jste uložily do složky /assets/www/ a přibalily do APK balíku. Jak to udělat, když to (evidentně z bezpečnostních důvodů) nejde?

Problém spočívá v tom, že pokud jednou v prohlížeči Cordovy zobrazíte externí web (tedy HTML uložené na vašem serveru a nikoliv uvnitř APK), tak již nemůžete pomocí klasických webových nástrojů (tagy, ajax, apod.) přistupovat k souborům z balíků (protože jednodušše neznáte jejich absolutní adresu - neexistuje žádné "http://muj.telefon.com/soubor.jpg"). Problém je ještě hlubší, protože na většině systémů soubory z balíků ani fyzicky neexistují na disku zařízení, ale jsou stále zabalené v balíků a pouze Cordova je dokáže vyextrahovat pomocí fiktivního webserveru.

Jak to tedy udělat? Přeci oklikou (anglicky workaroud)!

Základní princip triku spočívá v tom, že do aplikace dáte vlastní index soubor, který pomocí AJAXu všechny soubory přečte a přes Cordovu uloží na disk zařízení (do nějaké k tomu určené složky). Následně přesměruje na externí web, který pak bude moci opět pomocí Cordovy soubory přečíst u disku (protože zná jejich jména) a použít je na webu.

Javascript soubory bude potřeba před použitím zkompilovat funkcí "eval()", CSS bude potřeba vložit do nového tagu "STYLE" a obrázky bude možné použít pomocí konverze na "base64" (soubor se u disku přečte funkcí "readAsBase64()" a následně uloží do vlastnosti "SRC" tagu "IMAGE" s prefixem "data:image/jpeg;base64,".

Zmíněná metoda má své omezení - např. nelze použít na obrázky načítané přes CSS, FLASH animace, a další zdroje, které vyžadují přímé zadání URL.

var
	log = function(msg){
		$('body').append($('<p>' + msg + '</p>'));
	},
	fail = function(msg){
		return function(){
			log(msg);
		};
	},
	getFile = function(fs) {
//		var action = writeFile;
		var action = readFile;
		fs.root.getFile('Android/data/com.myApp/test.cache', {create: true, exclusive: false}, action, fail('no file'));
	},
	writeFile = function(file) {
		file.createWriter(write, fail('cannot write'));
	},
	write = function(file) {
		file.onwriteend = fail('file written');
		file.write('File created from Javascript');
	},
	readFile = function(file) {
		reader = new FileReader();
		reader.onloadend = readend;
		reader.readAsText(file, fail('cannot read'));
	},
	readend = function(event) {
		log(event.target.result);
	};

window.onload(function() {
	requestFileSystem(LocalFileSystem.PERSISTENT, 0, getFile, fail('no file system'));
});


[Akt. známka: 1,00 / Počet hlasů: 8] 1 2 3 4 5
Autor: Nothrem Sinsky | Komentáře: 4741 | Přidat komentář | Informační e-mail Vytisknout článek

  Vyhledávání

Vyhledat text

RybolovUbytování CyklistéPenzionChalupa Nová BystřicePenzion Jižní ČechyJižní Čechy chataUbytování samotaKomorníkUbytováníStrmilovKunžakČeská Kanada ubytováníJindřichův Hradec chata

  Administrace
Administrace

  Copyright
2006 © Nothrem Sinsky

Tento web byl vytvořen pomocí redakčního systému phpRS
Layout: SandStorm - verze 0.9.0
based on layout Beach - verze 1.1.0