我是 actionscript 的新手,有一些问题:
我在 CS 5.5 中使用 AS 3.0 编写了一个 rss 阅读器
当我按下 ctrl+Enter 时,它会读取我的 rss fead,
但是当我以 html 格式发布它时,它只是卡在图片上(显示在舞台上)并且什么都不做 + 显示违反沙箱的错误
我花了一整天的时间阅读文档,了解到它有域限制之类的东西,但仍然无法理解到底该怎么做,你能帮帮我吗
这是我的swf文件的代码
俄语.swf
var news_title:Array = new Array ();
var news_descr:Array = new Array ();
var news_pubdate:Array = new Array ();
var rus = "http://news.yandex.ua/index.rss";
test (rus,txt_descr,txt_title);
function test (link,txt_descr,txt_title)
{
var rssLoad:URLLoader = new URLLoader(new URLRequest(link));
rssLoad.addEventListener(Event.COMPLETE, end_rssLoad);
function end_rssLoad(rss_data:Event)
{
var rss_file:XML = new XML(rss_data.target.data);
for each (var item:XML in rss_file.channel.item)
{
news_title.push(item.title);
news_descr.push(item.description);
news_pubdate.push(item.pubDate);
}
show_rss();
}
function show_rss()
{
//number of news in rss field
var i:Number = 0;
//number of loops before update the field
var n:Number = 0;
function assign_rss_textBox()
{
txt_title.htmlText = news_title[i];
var blank_height = txt_descr.height;
txt_descr.htmlText = news_descr[i];
txt_descr.autoSize = "center";
txt_descr.y = txt_descr.y + (blank_height - txt_descr.height) / 2;
i+=1;
if (i >= news_title.length)
{
i=0;
n+=1;
if (n > 2)
{
clearInterval(delay_assign_rss_textBox);
}
}
}
assign_rss_textBox();
var delay_assign_rss_textBox = setInterval(assign_rss_textBox,500);
}
}
这是html页面的代码
<html>
<body>
<object width="600" height="125">
<param name="movie" value="russian.swf">
<param name="quality" value="high">
<embed src="russian.swf" quality=high width="600" height="125" ">
</embed>
</object>
</body>
</html>
最佳答案
如您所见,这是一个跨域安全问题,原因是您试图将数据从另一个域加载到您的 Flash 文件中。如果您查看 crossdomain.xml
在存储提要的域上,您会看到它只允许来自该域本身的请求。
如果您对跨域策略没有任何控制权(我认为您没有),通常的解决方案是在您自己的域上创建一个服务器端代理来读取数据并将其公开给您的SWF。 This article很好地解释了这个过程,并包括一个示例脚本。
还有一个解决方案解释了here这涉及镜像 Feedburner 中的提要并从那里使用它(大概它的跨域政策更宽松)而不是直接从源提要中使用。
关于html - 嵌入在 html 中的 actionscript rss,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11815708/