2013-04-29 6 views
1

J'utilise plug-in InAppBrowser de Cordova et je voudrais ouvrir une page Web à partir de mon application (Android, iOS). Toutefois, le site Web doit savoir si l'utilisateur a entré par le navigateur mobile ou via mon application.Define User Agent sur InAppBrowser de Cordova

Je pense que changer l'agent utilisateur de mon application serait capable de fonctionner. Y a-t-il une solution similaire à cela?

Je suppose que juste avant d'ouvrir une nouvelle fenêtre, je devrais définir que l'utilisateur a entré le site grâce à mon application.

window.open("http://test.example.com", "_blank", "location=no"); 

Répondre

2

Bien sûr, vous pouvez faire:

window.open("http://test.example.com?entry=app","_blank","location=no"); 
// see how we added ?entry=app query string? 

puis quelque part dans le code JavaScript de la page web que vous ouverture, analyser juste le paramètre « entrée » et faire quelque chose qui soit spécifique que vous vouloir faire en fonction de la valeur de l'entrée.

Vous devrez peut-être définir un cookie ou quelque chose si vous souhaitez utiliser cette logique sur plusieurs pages, car si elles cliquent sur un lien dans InAppBrowser, il perdra la chaîne de requête ?entry=app. Je suppose que vous pourriez essayer de remplacer l'URL chaque fois qu'ils cliquent sur un nouveau lien dans l'InAppBrowser en utilisant un addEventListener("loadstart",fn). De cette façon, la fonction fn est appelée chaque fois que l'utilisateur clique sur une nouvelle page et vous pouvez alors réécrire l'URL. Il pourrait être quelque chose comme:

var ref = window.open("http://test.example.com?entry=app", "_blank", "location=no"); 
ref.addEventListener("loadstart", IABcallback); 

function IABcallback(event){ 
    if(event.url.substr(event.url.search(/entry/, '')) === "entry=app"){ 
     // This is a lazy check for "entry" paramater, you should use a library or something 
     console.log("already have entry=app query string"); 
    }else{ 
     // open a new window with the same URL but add ?entry=app 
     ref = window.open(event.url+"?entry=app", "_blank", "location=yes"); 
     // reattach this event listener since it is a new window 
     ref.addEventListener("loadstart", IABcallback); 
    } 
} 

Cela fonctionne "d'accord". Le problème majeur est qu'il ouvre une nouvelle fenêtre InAppBrowser chaque fois qu'ils tapent un lien sur le dessus de la fenêtre en cours, ce qui rend le bouton de retour inutilisable. Vous pouvez essayer de contourner ce problème en utilisant ref.close() pour fermer la fenêtre, puis la rouvrir, mais j'avais des problèmes pour que cela fonctionne. J'ai également essayé d'utiliser un nom personnalisé pour la fenêtre (au lieu de "_blank"), mais cela n'a pas fonctionné non plus. Donc, désolé que c'est une réponse quelque peu incomplète mais j'espère que cela peut vous donner une idée. Il serait probablement beaucoup plus facile de charger l'application avec la chaîne de requête personnalisée et de se rappeler que vous venez de l'InAppBrowser via localStorage ou un cookie ou quelque chose comme ça.

+0

Merci. J'ai pensé à la même chose, mais je préfère le faire en changeant l'agent utilisateur (je pense que c'est plus soigné comme ça). Mais j'ai trouvé plusieurs difficultés avec l'agent utilisateur et l'ajout de ce paramètre fonctionne définitivement sans problème. Cela dépend de la page web que vous voulez ouvrir, dans mon cas c'est une application mobile Jquery donc tout l'index est chargé au démarrage (pas de raison de stocker un cookie). –