题
我希望抓住cookie值相同的领域内的一个闪电影。这可能吗?
让我们看看我让用户设定一个可变foo和我的商店它使用任何网站编程语言。我可以访问它很容易地通过该语言,但我想访问它通过快闪电影没有通过它在通过打印内HTML网页。
解决方案
如果你只是想来存储和检索的数据,你可能想要使用SharedObject类。看看 Adobe的SharedObject参考 更多详细信息。
如果你想要访问HTTP cookies,你需要使用ExternalInterface谈javascript。我们做的方式,在这里是有一个帮手类称为HTTPCookies.
HTTPCookies.为:
import flash.external.ExternalInterface;
public class HTTPCookies
{
public static function getCookie(key:String):*
{
return ExternalInterface.call("getCookie", key);
}
public static function setCookie(key:String, val:*):void
{
ExternalInterface.call("setCookie", key, val);
}
}
你需要确保启用javascript使用的'allowScriptAccess'参数,在你的闪光对象。
然后你需要创建一个对javascript功能,getCookie和setCookie,如下所示(与感谢 quirksmode.org)
HTTPCookies.js:
function getCookie(key)
{
var cookieValue = null;
if (key)
{
var cookieSearch = key + "=";
if (document.cookie)
{
var cookieArray = document.cookie.split(";");
for (var i = 0; i < cookieArray.length; i++)
{
var cookieString = cookieArray[i];
// skip past leading spaces
while (cookieString.charAt(0) == ' ')
{
cookieString = cookieString.substr(1);
}
// extract the actual value
if (cookieString.indexOf(cookieSearch) == 0)
{
cookieValue = cookieString.substr(cookieSearch.length);
}
}
}
}
return cookieValue;
}
function setCookie(key, val)
{
if (key)
{
var date = new Date();
if (val != null)
{
// expires in one year
date.setTime(date.getTime() + (365*24*60*60*1000));
document.cookie = key + "=" + val + "; expires=" + date.toGMTString();
}
else
{
// expires yesterday
date.setTime(date.getTime() - (24*60*60*1000));
document.cookie = key + "=; expires=" + date.toGMTString();
}
}
}
一旦你HTTPCookies.因为在你的闪光灯项目,HTTPCookies.js 从你的网页,你应该可以打电话getCookie和setCookie从你的闪电影获得或设定HTTP cookies。
这只会的工作非常简单的数值字或号码-但是为什么更复杂的,你真的应该是使用SharedObject.
其他提示
我相信flash对象具有可通过javascript访问的功能,所以如果没有更简单的方法,你至少可以使用javascript onload处理程序并从外部将document.cookie传递到你的flash应用程序中。
您可以从Flash读取和写入Cookie(本地共享对象)。 Flash Cookie存储在您的PC上的域名目录中。这些目录位于:
[Root drive]:\Documents and Settings\[username]\Application Data\Macromedia\Flash Player\#SharedObjects\
来自Adobe的文章是一个良好的开端。
一些谷歌搜索显示可以使用查询字符串来完成:
对于Web应用程序,您可以通过 通过url参数将值赋予swf,以及 (在swf中使用动作脚本)保存 他们到了沙箱。
通过document.cookie可以通过javascript获取cookie - 尝试使用flash的getURL来调用javascript函数。
getURL('javascript:document.cookie =&quot; varname = varvalue; expires = Thu,2001年8月2日20:47:11 UTC; path =&quot;');
getCookie方法应该使用“return”言。
import flash.external.ExternalInterface;
public class HTTPCookies
{
public static function getCookie(key:String):*
{
return ExternalInterface.call("getCookie", key);
}
public static function setCookie(key:String, val:*):void
{
ExternalInterface.call("setCookie", key, val);
}
}
我已经晚了10年。如果您可以在页面中嵌入所需的数据,那么抓取它会轻松10倍。
import flash.net.*
var _loader:URLLoader = new URLLoader();
var _req:URLRequest = new URLRequest('https://stackoverflow.com');
_loader.addEventListener(Event.COMPLETE, _onComplete);
_loader.load(_req);
function _onComplete(e:Event):void{
var wantedData:RegExp = /<div class="cool-data">(.*?)</div>/ig;
var result:Object = wantedData.exec(String(_loader.data));
trace(result[0].split('<div class="cool-data">').join('')
.split('</div>').join(''));
}