Question

J'ai écrit une application Flex obtenir la chaîne hôte du navigateur en utilisant ce code

ExternalInterface.call("window.location.host.toString")

Cette ligne de travail de code prefectally pour obtenir la chaîne hôte dans Firefox et Opera. Cependant, lorsque vous utilisez IE, la chaîne retournée est toujours « nul ». Je dois obtenir ces informations à partir du navigateur. Je sais qu'il ya un travail autour en définissant une fonction javascript qui obtenir une telle chaîne et d'appeler cette fonction de l'application. Cependant, ma demande nécessite d'obtenir ces informations à partir d'une source naturelle.

Je me demandais si quelqu'un avait le même problème et a réussi à le résoudre, ou si quelqu'un a une idée pourquoi je suis toujours nulle dans IE, mais pas lorsque vous utilisez Firefox et Opera

Edit 1:

Voici le code HTML pour intégrer le fichier SWF généré. Peut-être cela est utile pour repérer une erreur

<object id="myTest1" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" height="330px" width="600px">
<param name="movie" value="http://www.website.com/test.swf" />
<param name="allowScriptAccess" value="always" />
<param name="wmode" value="transparent" />
<embed id="myTest1" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://www.website.com/test.swf" allowScriptAccess="always" wmode="transparent" height="330px" width="600px" flashvars=""></embed>
</object>

l id, classid, et le allowScriptAccess sont définis comme indiqué

Toute idée?

Edit 2:

pour Lior Cohen Le fichier Flex est l'exemple utilisé dans votre premier lien. L'histoire sous-répertoire contient history.js, history.css et historyFrame.html. La page HTML qui inclut le fichier SWF généré est comme ceci

<html>
<head>
<!--  BEGIN Browser History required section -->
<link rel="stylesheet" type="text/css" href="history/history.css"/>
<script src="history/history.js" language="javascript"></script>
<!--  END Browser History required section -->
</head>
<body>
<object id="file1" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" height="330px" width="600px">
    <param name="movie" value="file.swf" />
    <param name="allowScriptAccess" value="always" />
    <param name="wmode" value="transparent" />
    <embed id="file2" pluginspage="http://www.macromedia.com/go/getflashplayer" src="file.swf" allowScriptAccess="always" wmode="transparent" height="330px" width="600px" flashvars=""></embed>
</object>
<body>
</html>

Cependant, cela ne fonctionne toujours pas comme prévu.

Edit 3:

Je l'ai repéré le problème, mais je ne peux pas réparer. Le problème a à voir avec le moteur javascript de IE et non l'ExternalInterface ni l'objet et embed balises HTML.

Ce que je fais dans mon cas est d'écrire les balises object et embed dans un div javascript et créé à l'aide de cette div est ajouté à la fin du corps en utilisant les méthodes DOM. Cependant, cette approche fait l'InternalInterface retourne toujours NULL dans IE (mais pas dans Firefox ni dans Opera).

var swfDiv = document.createElement('div');
swfDiv.innerHTML = '<object id="test1" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="600" height="330"><param name="movie" value="http://www.website.com/test.swf" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="quality" value="high" /><embed id="test2" name="test2" src="http://www.website.com/test.swf" allowScriptAccess="always" allowFullScreen="false" quality="high" width="600" height="330" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>';
document.body.appendChild(swfDiv);

J'ai essayé d'utiliser document.write pour ajouter le contenu HTML, ce qui fait fonctionner parfaitement dans IE, cependant, document.write a écrit sur toute la page (suppression ancien contenu), ce qui est quelque chose que je ne veux pas.

document.write('<object id="test1" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="600" height="330"><param name="movie" value="http://www.website.com/test.swf" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="quality" value="high" /><embed id="test2" name="test2" src="http://www.website.com/test.swf" allowScriptAccess="always" allowFullScreen="false" quality="high" width="600" height="330" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>');

Toute idée de comment résoudre ce problème?

Merci

Était-ce utile?

La solution 3

La solution au problème qui est mentionné dans « Edit 3 » est essentiellement de créer l'étiquette d'objet et ses balises de paramètres à l'aide des objets DOM, au lieu de les spécifier sous forme de chaîne pour l'attribut innerHTML. Cela rendra la valeur retournée du travail ExternalInterface dans Internet Explorer. Voici un exemple:

var swfDiv = document.createElement('div');

var obj = document.createElement('object');
obj.setAttribute('id','test1');
obj.setAttribute('codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0');
obj.setAttribute('width','600px');
obj.setAttribute('height','330px');

var param = document.createElement('param');
param.setAttribute('name','movie');
param.setAttribute('value','http://www.website.com/test.swf');
obj.appendChild(param);

param = document.createElement('param');
param.setAttribute('name','allowScriptAccess');
param.setAttribute('value','always');
obj.appendChild(param);

param = document.createElement('param');
param.setAttribute('name','wmode');
param.setAttribute('value','transparent');
obj.appendChild(param);

swfDiv.appendChild(obj);
document.body.appendChild(swfDiv);

document.getElementById('test1').setAttribute('classid','clsid:d27cdb6e-ae6d-11cf-96b8-444553540000');

Note 1: Cela fera fonctionner avec Internet Explorer, un autre navigateur doit utiliser toute la méthode mentionnée ci-dessus dans « Edit 3 » de la question. Vous pouvez détecter le navigateur et utiliser le code approprié en conséquence.

Note 2: la dernière ligne est nécessaire pour le faire fonctionner correctement, et il doit être comme ça et à la fin après avoir ajouté l'objet au document. Je ne sais pas pourquoi, sans doute, il a à voir avec le comportement du navigateur bizarre.

Autres conseils

Jetez un oeil sur le lien suivant. Il devrait vous fournir ce que vous cherchez, sans utiliser ExternalInterface.call ().

http://livedocs.adobe.com /flex/3/html/help.html?content=deep_linking_7.html

Comme mentionné dans la page ci-dessus, pour la classe BrowserManager d'offrir ses fonctionnalités, l'emballage doit comporter plusieurs fichiers de support (de history.js, entre autres).

Plus d'informations sur la façon d'obtenir et d'utiliser ces fichiers de support se trouve dans le lien suivant dans la section « Déploiement d'applications qui utilisent des liens profonds ».

http://livedocs.adobe.com /flex/3/html/help.html?content=deep_linking_2.html

Une recherche rapide révèle que vous devrez définir quelques attributs supplémentaires sur l'objet pour le faire fonctionner dans IE. Set ID et scriptAccess identificateur de classe (le dernier à « vrai » bien sûr) pour que cela fonctionne. (Google pour plus d'informations)

(non testé).

http://www.google.com/search?q=externalinterface + Internet + explorer

@AAA

  

Note 2: la dernière ligne est nécessaire pour le faire fonctionner correctement, et il doit être comme   que et à la fin après avoir ajouté l'objet au document. je ne sais pas   pourquoi, sans doute, il doit faire avec le comportement du navigateur bizarre.

Merci beaucoup! Je suppose qu'il est un bug dans IE. Je me demande comment vous avez.

Utilisation SWFObject (vous le trouverez à http://code.google.com/p / swfobject / ) pour placer le flash sur la page permet également de résoudre ce problème dans Internet Explorer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top