Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας παιδιά.

 

Υπάρχει τρόπος η javascript να βρει αν υπάρχει ενα συγκεκριμένο string μέσα σε όλο το παράθυρο;

 

Πιθανότατα γίνεται αλλά αυτό που είναι σημαντικό για εμένα είναι αν μπορεί να καταλάβει αν υπάρχει το εν λόγω string και σε ένα iframe μέσα στο παράθυρο.

 

Ρωτάω γιατί σε μια android εφαρμογή που δουλεύω ή οποία έχει φτιαχτεί με webview, θέλω να στέλνω κάποια δεδομένα σε php αρχεία αποθηκευμένα σε ένα domain που έχω και να τα καλώ σε iframe (στέλνω τιμές μέ $_GET μέσω του url του iframe). Μέχρι εδώ όλα μια χαρά απλά σε κάποιες περιπτώσεις ανάλογα με το μήνυμα που εμφανίζεται στο iframe θέλω να τρέχω (τοπικά στην android συσκευή) κάποιες συναρτήσης.

 

Δοκίμασα να τρέχω τη συνάρτηση μέσα από το iframe μέσω τις parent() αλλά δεν λειτουργεί για λόγους ασφαλείας. Και νομίζω πως η postMessage() δεν βοηθάει ιδιαίτερα.

 

Επίσης δοκίμασα να δουλέψω με ajax αλλά και πάλι το γεγονός ότι τα αρχεία δεν βρίσκονται στο ίδιο μέρος η αμφίδρομη επικοινωνία είναι αδύνατη.

 

*Γνωρίζω ότι υπάρχουν τα CORS, JSONP κτλ αλλά νομίζω πως στην περίπτωση μου και αυτά δεν λειτουργούν.

 

 

Δημοσ.

Και νομίζω πως η postMessage() δεν βοηθάει ιδιαίτερα.

*Γνωρίζω ότι υπάρχουν τα CORS, JSONP κτλ αλλά νομίζω πως στην περίπτωση μου και αυτά δεν λειτουργούν.

 

Αν μας έδινες να καταλάβουμε και τίποτα για την περίπτωσή σου θα μπορούσαμε και μεις να νομίσουμε πράγματα.

 

Seriously διάβαζα και τα προηγούμενα post και δεν έμπαινα στον κόπο να απαντήσω γιατί από τεχνικές πληροφορίες τίποτα. Τουλάχιστον εδώ λες και ένα "τα αρχεία δεν βρίσκονται στο ίδιο μέρος" και όποιος ξέρει καταλαβαίνει ότι εννοείς domain και ότι έχεις πρόβλημα λόγω του same origin policy αλλά έτσι πρωτάθλημα δεν παίρνεις. You have to do better.

 

ΥΓ αν μη τι άλλο με postMessage σίγουρα μπορείς να κάνεις κάτι. Πιθανόν και χωρίς.

Δημοσ.

Ωραία!

 

Λοιπόν έχω μια android εφαρμογή (αυτή της υπογραφής μου) που είναι φτιαγμένη σε εξ ολοκλήρου (πολύ λίγα πράγματα σε java και αυτά γιατί ήταν αναγκαία) σε webview, δηλαδή html+javascript. Δεν χρησιμοποιώ κάποιο framework τύπου cordova απλά και μόνο την jquery. Επειδή θέλω να δω αν μπορώ να κάνω την εφαρμογή μου - κουίζ λίγο πιο ανταγωνιστική σκέφτηκα να φτιάξω ένα υπερβολικά απλό σύστημα αποθήκευσης της βαθμολογίας online. Έτσι κάθισα και έφτιαξα κάποια αρχεία php ώστε να το πετύχω αυτό. Επειδή όμως έχω φτιάξει και προσομοίωση της εφαρμογής σε browser (ε html είναι) αρχικά έκανα τις επιμέρους αλλαγές στο html αρχείο που χρησιμοποιώ στο site και το δούλευα σε localhost με xamp. Όπως είναι το λογικό επειδή ήθελα να παίρνω δυναμικά στοιχεία μέσω php χρησιμοποίησα ajax και στον τοπικό μου σέρβερ δούλευε μια χαρά. Έτσι ανέβασα τα αρχεία σε ένα δωρεάν hosting από το papaki.gr και έκανα και τις ανάλογες αλλαγές στον κώδικα του application. Εκεί κατάλαβα όμως ότι αυτό δεν δουλεύει λόγω του same origin policy που είπες παραπάνω.

 

Μετά από σκέψη και ψάξιμο κατάλαβα ότι σίγουρη λύση δεν υπάρχει ούτε με JSONP ούτε με CORS ούτε με τίποτα και αυτό όχι λόγω του ότι αυτά δεν δουλεύουν αλλά γιατί έτσι λειτουργεί το webview των android εφαρμογών (αν κάνω λάθος κάποιος να με διορθώσει). Κάπως έτσι είπα ωραία τότε θα το φτιάξω με iframe και αντί για τη χρήση της POST στην php θα χρησιμοποιήσω GET και θα περνάω τις μεταβλητές μέσω του src στο iframe. Όλα μια χαρά στον τοπικό σέρβερ. Στην πρώτη δοκιμή στο android κινητό μου όμως είδα ότι επειδή το iframe περιέχει στοιχεία από εξωτερικό domain (ή σέρβερ ή όπως θέλετε πείτε το), παρόλο που στο iframe εμφανίζονται σωστά αυτά που θέλω, το iframe δεν επικοινωνεί με το υπόλοιπο παράθυρο. Το πρόβλημα έγκειται στο ότι μέσω του php αρχείου καλώ δύο συναρτήσης javascript η οποίες είναι δηλωμένες στο αρχικό παράθυρο μου. Ο τρόπος που τις καλώ είναι ο παρακάτω:

echo "<script type='text/javascript'>
	parent.setUserData('".$x."','".$y."');
	parent.checkUserData(parent.returnUserData);
</script>";

Μετά από αυτό άρχισα πάλι να ψάχνω και διάβασα πως αν το περιεχόμενο του iframe είναι από εξωτερική πηγή τότε δεν επικοινωνεί για λόγους ασφαλείας με το υπόλοιπο παράθυρο. Οπότε λέω μήπως γίνεται να παίρνω σε ένα variable το περιεχόμενο του iframe με καθαρή javascript ή με jquery και να τσεκάρω αν σε αυτό υπάρχει μια πρόταση ή μια λέξη και ανάλογα με το τι θα λάβω ως απάντηση (true ή false) να τρέξω τις συναρτήσεις κανονικά με javascript εκτός του iframe.

 

Για να φορτώσει το php αρχείο στο iframe τρέχω την εξής συνάρτηση:

function click_me(){
	var x = $('#x').val();
	var y = $('#y').val();
	var url = "tositemou.gr/mplamplampla.php";
	var final_url = url + "?x=" + x + "&y=" + y;
	$('#iframe').attr('src',final_url);
}
Να τονίσω πως οι μεταβλητές περνούν κανονικότατα στο αρχείο php καιη δουλειά που πρέπει να γίνει εκεί γίνεται μια χαρά, απλώς δεν επικοινωνεί το iframe με το υπόλοιπο παράθυρο (εφαμοργή).

 

Καλύτερα τώρα ή πάλι είπα τα ίδια με περισσότερα λόγια; :P

  • Like 1
Δημοσ.

Για την ακρίβεια είναι μόνο μια σελίδα html και κρύβω και εμφανίζω divs με jquery.

Το τοπικό high_score το αποθηκεύω με sqlite μιας που το υποστηρίζει το webview καθώς βασίζεται στο webkit του chrome.

Απλά θέλω να έχει τη δυνατότητα ο χρήστης αν θέλει να δει σε ποια θέση βρίσκεται σε σχέση με τους υπόλοιπους που παίζουν το κουίζ και θεώρησα πως θα είναι εύκολο αν γίνεται επικοινωνία με php αρχεία. Με ajax που δοκίμασα, στην πλευρά του server όλα δουλεύουν ρολόι, απλά αυτά που ήταν να λάβω πίσω με jquery δεν τα λάμβανα ποτέ.

 

Έτσι κατέληξα στα iframes.

Πριν λίγη ώρα κατάφερα να επικοινωνήσω με την postMessage από την εφαρμογή (html αρχείο) στο iframe με τον παρακάτω κώδικα:

 

parent html αρχείο:

function sendMessage(){
	var x = document.getElementById('iframe').contentWindow;
	x.postMessage("τεστ","http://tositemou.gr");
}
//καλώντας τη συνάρτηση στέλνω το μήνυυμα "τεστ" στο iframe

μέσα στο php που φορτώνεται στο iframe:

echo "<script type='text/javascript'>
     function listener(event){
	document.getElementById('iframe_message').innerHTML = event.data;
     }
						
     if(window.addEventListener){
	addEventListener('message',listener,false);
     }else{
	attachEvent('onmessage', listener);
     }
</script>";

Το κακό είναι πως δεν κατάφερα να κάνω το ανάποδο...

 

parent html αρχείο:

function receiveMessage(evt){
	alert("got message: "+evt.data);
}

window.addEventListener('message', receiveMessage, false); //αυτό το καλώ όταν πατάω ένα κουμπί μετά τη φόρτωση του iframe

iframe:

echo "<script type='text/javascript'>
        parent.postMessage('den douleuei','*');
</script>";

Τώρα θα μου πεις ... η android συσκευή δεν ανοίκει σε κάποιο domain αλλά οκ :P

Δημοσ. (επεξεργασμένο)

Πάντως αυτό που θέλω να κάνω είναι η εφαρμογή να καταλαβαίνει αν τελικά έγινε ένα πολύ απλό register από τον χρήστη, ώστε να μου ξεκλειδώσει κάποιες άλλες λειτουργίες.

 

Αυτό νομίζω ότι δεν το είχα πει.

 

***Τελικά δούλεψε!

αυτό στο html αρχείο:

$('#reg_iframe').load(function(){
	window.addEventListener('message', receiveMessage, false);
})

var iframe_result = '';

function receiveMessage(evt){
	iframe_result = evt.data;
}

και αυτό στο php που καλείται μέσα στο iframe:

echo "<script type='text/javascript'>
           parent.postMessage('true','*');
     </script>";
Επεξ/σία από rafinos

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...