0

このコードを使用して、ブラウザーからホスト文字列を取得するフレックス アプリケーションを作成しました。

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

このコード行は、Firefox と Opera の両方でホスト文字列を取得するために完全に機能します。ただし、IE を使用する場合、返される文字列は常に「null」です。そのような情報をブラウザから取得する必要があります。そのような文字列を取得する JavaScript 関数を定義し、アプリケーションからその関数を呼び出すことで回避策があることを私は知っています。ただし、私のアプリケーションでは、ネイティブ ソースからそのような情報を取得する必要があります。

誰かが同じ問題を抱えていてそれを解決できたのか、または IE で常に null になる理由を誰かが知っているのに、Firefox と Opera を使用しているときにそうではないのかと思っていました。

編集1:

生成された SWF ファイルを埋め込むための HTML コードを次に示します。たぶん、これは間違いを見つけるのに役立ちます

<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>

id、classid、allowScriptAccess は次のように設定されています。

何か案が?

編集2:

for Lior Cohen Flex ファイルは、最初のリンクで使用されている例です。サブディレクトリ history には、history.js、history.css、および historyFrame.html が含まれています。生成された SWF ファイルを含む HTML ページは次のようになります。

<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>

ただし、これはまだ期待どおりに機能していません。

編集3:

問題を発見しましたが、修正できません。この問題は、ExternalInterface や object および embedded HTML タグではなく、IE の JavaScript エンジンに関係しています。

私の場合、JavaScriptを使用して作成されたdivにオブジェクトと埋め込みタグを書き込み、DOMメソッドを使用してこのdivをボディの最後に追加します。ただし、このようなアプローチにより、InternalInterface は常に IE で null を返します (ただし、Firefox や 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);

document.write を使用して HTML コンテンツを追加しようとしたため、IE で完全に機能しましたが、document.write はページ全体に書き込み (古いコンテンツを削除) しましたが、これは望ましくありません。

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>');

これを修正する方法はありますか?

ありがとう

4

5 に答える 5

1

次のリンクをご覧ください。ExternalInterface.call()を使用せずに、探しているものを提供する必要があります。

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

上記のページで説明したように、BrowserManagerクラスがその全機能を提供するには、ラッパーにいくつかのサポートファイル(特にhistory.js)が含まれている必要があります。

これらのサポートファイルを取得して使用する方法の詳細については、「ディープリンクを使用するアプリケーションのデプロイ」セクションの次のリンクを参照してください。

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

于 2009-08-12T15:15:14.867 に答える
0

クイック検索を行うと、IEで機能させるために、オブジェクトにいくつかの追加の属性を設定する必要があることがわかります。これを機能させるには、id classIdとscriptAccess(もちろん最後のものを「true」に設定)を設定します。(詳細についてはグーグル)

(未検証。)

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

于 2009-08-12T12:52:47.313 に答える
0

@AAA

注 2: 適切に機能させるには最後の行が必要であり、ドキュメントにオブジェクトを追加した後、そのようにする必要があります。理由はわかりませんが、おそらくブラウザの奇妙な動作に関係しています。

どうもありがとうございました !IEのバグだと思います。どうやって分かったのかしら。

于 2009-09-26T13:48:03.557 に答える
0

SWFObject ( http://code.google.com/p/swfobject/にあります) を使用してページに Flash を配置すると、Internet Explorer でこの問題も解決されます。

于 2010-06-28T12:54:58.880 に答える