19

ドメイン間で ExternalInterface を介して Javascript と Flash 間の通信を有効にしようとしています。Javascript は、SWF と同じドメインにある場合にうまく機能します。しかし、あるケースでは、HTML がドメイン A に存在し、javascript とフラッシュの両方がドメイン B に存在します。私は次のすべてを実行しました。

  • 埋め込みタグにはallowScriptAccess="always"(そしてオブジェクトにはそれがパラメータとして含まれています)
  • 私の SWF ファイルの actionscipt にはSecurity.allowDomain("*")
  • 私の SWF も呼び出しますSecurity.allowInsecureDomain("*")
  • ドメイン A とドメイン B の両方に/crossdomain.xmlallow-access-from domain="*"

SWF はページ上で JavaScript を呼び出すことができますが、Javascript を使用して ExternalInterface によって公開された関数を呼び出すと、

NPObject のメソッド呼び出しエラー! [プラグインの例外: Actionscript でエラーが発生しました。エラーを見つけるには、try/catch ブロックを使用してください。]

これは ActionScript 2 であるためExternalInterface.marshallExceptions、使用できません。

4

6 に答える 6

20

これが機能するために必要なのは、次の 2 つだけです。

1)allowscriptaccess=alwaysswfがページに情報を送信できるようにします

2)System.security.allowDomain("yourhtmldomain.com");

AS2にあることに注意してくださいSystem.security.allowDomain()。AS3 や上記の内容とは異なります。

上記の番号 2 により、domainA の html ページが domainB の swf 内のものを呼び出すことができます。

js がホストされているドメインはここでは重要ではありません。ブラウザーはそれを domainA に埋め込むため、スクリプトは domainA で実行されます。

crossdomain.xml は、主にリモート ファイルをロードするためのものであり、実行していないため、必要に応じて削除できます。(そしておそらく、メインドメインに置かれた crossdomain.xml ファイルを持ちたくないでしょう。それはallow="*"非常に悪い習慣です)

于 2009-06-28T16:47:00.327 に答える
1

私にとっていくつかの理由は(私はuploadifyを使用しています)でした:

httpサーバーに宛先swfobject(フラッシュ)にファイルを書き込む権限がありませんドメイン間アクセスがありません

解決策:htmlのオブジェクトタグにはallowScriptAccess = "always"が必要です。これは、次のようなsetparamで実行できます。

$('#file_upload').uploadifySettings('scriptAccess', 'always')
than flash object must have:
import flash.system.Security;
Security.allowDomain('remotedomain.com'); 

これは、このパラメーターを使用してソースをコンパイルすることで実行できます。必要に応じて、uploadifyの件名で私に書き込みます。フラッシュがページに含まれているリモートサーバーよりも、ルートのcrossdamoin.xmlファイルに次のようなコンテンツが含まれている必要があります。

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
于 2011-03-25T10:50:45.293 に答える
1

複数の swfs をロードしているため、ロードされるドメイン B の各 swfs にセキュリティ設定を含める必要がある場合があります。

適切なセキュリティ設定を持つローダー コンテキストも必要になる場合があります。

import flash.system.LoaderContext;
import flash.system.ApplicationDomain;
import flash.system.Security;
import flash.system.SecurityDomain;
import flash.net.URLRequest;
import flash.net.URLLoader;

var context:LoaderContext = new LoaderContext(true, ApplicationDomain.currentDomain, (Security.sandboxType == Security.REMOTE) ? SecurityDomain.currentDomain : null);
var l:Loader = new Loader();
l.load(new URLRequest("http://example.com/myswf.swf"), context);
于 2009-06-26T15:33:01.263 に答える
0

私はこれと同じ問題を抱えていました(allowDomainなどは良かったです)が、フラッシュに悪いパラメーターを送信します-ajax呼び出しからJSONを出力しただけです。そのjsonを""に入れて、それをjavascriptオブジェクトに解析すると(jQuery.parseJSONを介して)、問題は解決しました。

于 2011-02-04T13:01:33.230 に答える
0

ExternalInterface.addCallback()AS3 を Flash Player バージョン 10 で使用すると、ローカルでテストするために正しく動作することができませんでした。パラメータ「allowNetworking」に値「all」を追加することで、最終的にローカルコピーが機能するようになりました(http://www.adobe.com/livedocs/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp. htm?context=LiveDocs_Parts&file=00001079.html )。これに苦しんでいる人に頑張ってください!

于 2010-05-05T20:28:10.737 に答える
0

私の場合は、uploader div を含む DOM 要素を変更していたためです。

jquery hide() 関数を使用して、アップローダーを含む div を非表示にしました。それが上記のエラーの原因であることに気付いたとき、div の「float」属性を設定する別のアプローチを試しました。どちらの場合も、アップローダーが壊れました。

FWIW、アップローダを含む div の幅/高さを 0 に設定してもエラーは発生しないようです。

于 2011-09-04T22:00:41.043 に答える