Problème de l'injection de script externe avec executeScript méthode de Cordoue
Je suis en train d'écrire un mannequin application pour tester la façon dont fonctionne le executeScript() la méthode à l'intérieur de Cordoue est InAppBrowser plugin. En particulier, je suis en train d'injecter un code javascript à l'intérieur d'une webview.
Ici, il y a ma index.html fichier:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="format-detection" content="telephone=no" />
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
<link rel="stylesheet" type="text/css" href="css/style.css" />
<script type="text/javascript" src="phonegap.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<title>InAppBrowser Injection Test</title>
</head>
<body>
<div class="app">
<h1>Testing Injection</h1>
<div id="deviceready" class="blink">
<p class="event listening">Starting Mother WebView</p>
<div class="event received">
<p>Device is Ready</p>
</div>
</div>
</div>
<script type="text/javascript">
app.initialize();
</script>
</body>
</html>
Et la index.js fichier
var app = {
initialize: function() {
this.bindEvents();
},
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
onDeviceReady: function() {
app.receivedEvent('deviceready');
var ref = window.open('http://www.example.net', '_blank', 'location=yes ,toolbar=yes, EnableViewPortScale=yes');
ref.addEventListener('loadstart', function(event) { alert('start: ' + event.url); });
ref.addEventListener('loadstop', function() {
//ref.executeScript({ code: "alert('Injected Code')" });
ref.executeScript({ file: "externaljavascriptfile.js" });
showalert();
});
ref.addEventListener('loaderror', function(event) { alert('error: ' + event.message); });
ref.addEventListener('exit', function(event) { alert(event.type); });
},
receivedEvent: function(id) {
var parentElement = document.getElementById(id);
var listeningElement = parentElement.querySelector('.listening');
var receivedElement = parentElement.querySelector('.received');
listeningElement.setAttribute('style', 'display:none;');
receivedElement.setAttribute('style', 'display:block;');
console.log('Received Event: ' + id);
}
};
et, enfin, le externaljavascriptfile.js
alert('External Injected Code');
Si j'essaie d'injecter du code javascript directement (c'est à dire de décommenter la ligne "réf.executeScript({ code: "alert('le Code Injecté')" });"), tout fonctionne bien et que l'alerte est déclenchée après le chargement de la page, mais si j'essaie d'injecter du javascript externe (c'est à dire à l'aide de la ligne "réf.executeScript({ fichier: "externaljavascriptfile.js" });", rien ne se passe.
Suis-je raté quelque chose?
Merci pour la réponse, mais aussi vous manquez le point. La discussion lié par vous est propos de l'injection de code javascript à travers une application native, qui est fondamentalement un programme Java. J'ai besoin de faire la même chose, mais à travers Phonegap/cordova.
OriginalL'auteur Antonio Giovanni Schiavone | 2014-04-03
Vous devez vous connecter pour publier un commentaire.
Avez-vous installé le inappbrowser plugin?
J'ai ce travail dans android comme suit:
EDIT: mis à Jour pour cordova 7
Créer le projet phonegap
Mise à jour index.js -voici mon onDeviceReady fonction:
Déployer pour mon HTC
fichier de script externe est ici
l'intégralité de la copie de travail de ce projet est ici
ce qui concerne,
Av
mise à jour pour cordova 7 avec de nouveaux liens. Merci de me laisser savoir.
np merci vais jeter un oeil.
OriginalL'auteur Avner
En fait, je pense que vous connaissez déjà la réponse.
executeScript()
méthode run de l'enfant WebView.Dans votre code,
executeScript()
méthode est référencéhttp://www.example.net/externaljavascriptfile.js
, pas dans votre fichier de script dans/www/js
cordova répertoire. Parce queexecuteScript()
méthode injecte JavaScript dans childview comme vous le savez.Vous pouvez tester le code ci-dessous. J'ai mis le fichier dans mon site web.
FYI, si vous avez besoin d'obtenir les données de childview, vous pouvez utiliser le callback.
Dans
externaljavascriptfile.js
:Pour le bien de la fin : ... getAsset: function(theUrl) { var xmlHttp = new XMLHttpRequest(); xmlHttp.open( "GET", theUrl, false ); xmlHttp.send( null ); return xmlHttp.responseText; } ... feront l'affaire !
Bon appel Edward. Génie solution!
Cette solution ne fonctionne pas lorsque
_self
option est utilisée.Comment est-ce lié? Est-il possible de créer un
getWindow()
fonction qui renvoie lawindow
objet donc on ne peutaddEventListener
, par exemple?OriginalL'auteur Edward
Utiliser Ajax pour obtenir JS fichier de données puis à l'injecter à l'aide d'exécuter le script
Avec cette méthode, vous pouvez ajouter un fichier de script qui se trouve dans le local de l'APPLICATION de la sandbox, et non pas autour de l'Internet.
Note, vous devez cordova-plugin-fichier:
cordova plugin ajouter cordova-plugin-fichier
OriginalL'auteur Aman Uppal
externaljavscriptfile.js n'est pas lié à votre fichier html.
Vous avez besoin de l'inclure avec l'
balise ou de le charger dynamiquement avec:
REMARQUE: vous devrez peut-être mettre votre code dans une fonction à exécuter.
Espère que cela fonctionne.
Désolé pour le retard. Je ne sais pas...essayez d'utiliser le chemin d'accès complet à l' .fichier js au lieu de le raccourcir...
OriginalL'auteur IlToro