2010-08-09 82 views
0

我在flex中制作了一个博客小部件。我需要在我的用户博客中添加的小部件中操作Cookie。但在某些情况下,一些博客主机禁止访问JavaScript,所以我无法通过externalInterface访问cookie。有没有人知道如何在这种情况下访问cookie?谢谢。我如何通过flex访问cookie?

+0

在什么情况下不能访问Javascript? – Robusto 2010-08-09 12:30:41

+0

SecurityError:错误#2060:安全沙箱冲突:ExternalInterface调用方http://abc.com/callJs.swf无法在flash.external :: ExternalInterface $/_ initJS()中访问http://blog.cdf.com/abc – tuesday 2010-08-09 12:41:29

+0

。 \t在flash.external :: ExternalInterface的$ /()调用 \t在callJs/callWrapper() \t在callJs/___ callJs_Application1_creationComplete() \t在flash.events::EventDispatcher/dispatchEventFunction() \t在flash.events: :EventDispatcher/dispatchEvent() \t at mx.core :: UIComponent/dispatchEvent() \t at mx.core :: UIComponent/set initialized() \t在mx.managers LayoutManager的::/doPhasedInstantiation() \t在mx.managers LayoutManager的::/doPhasedInstantiationCallback() – tuesday 2010-08-09 12:42:29

回答

0

我的答案是,您无法从Flash Player访问浏览器Cookie。 ExternalInterface的使用是一种黑客攻击。

根据错误,听起来您的SWF是从不同于包含它的网页的域中提供的。真的吗?如果是这样,那是错误的原因。这与“Cross Site Scripting”利用的方法不同吗?

通过将allowScriptAccess指定为始终在SWF嵌入代码中,您可以允许JavaScript从不同的域访问它的HTML包装器。更多信息在Adobe docs

您可以尝试将crossdomain.xml文件添加到主站点,但我不认为这会产生影响,因为我非常确定ExternalInterface用法不是crossdomain.xml检查用例。

1

您需要在您的嵌入代码中将allowScriptAccess设置为“*”。不幸的是,你不能允许每个域的访问权限,所以它是全部或没有。但是,博客的所有者可能不想授予此权限,在这种情况下,您只能指望从您的swf访问Javascript。 PS:如果您允许从具有授权访问权限的相同域中提供swf,则可以将其用作将用javascript检索到的数据发送到从其他域提供的swf的代理。不知道这是否是最好的主意。

0

我很好奇cookie来自哪里。如果您的Flex应用程序通过SharedObject创建cookie,那么您不需要javascript来访问它。如果cookie来自另一个应用程序/源,那么就我所知,唯一真正的访问方法是通过javascript externalinterface方法。