我有一个Flash网站(here),可以通过Wordpress的RSS从wordpress网站(here)导入一些内容(我添加了一个插件,在RSS中包含页面)。这不是我所知道的一个好主意,但是由于一长串原因,我不会进入它的设置我坚持:/
导入RSS源(它在运行时下载到SWF并像XML一样读取)时,我无法获取文件大小。这意味着预加载器不准确(我只是手动猜测一个数字,它现在可以使用,显然会随着时间的推移而增长)。 如何获得此文件大小?
我知道服务器上可能存在压缩feed /文件(GZip等)的某些设置,但我对wordpress架构非常不熟悉,尽管我付出了最大努力,但我无法找到应用此设置的位置
这是预加载器更新代码。 113 * 1024是我想放置rss_loader.bytesTotal(WordPress内容的加载器)的地方,但是当我这样做时rss_loader.bytesTotal返回为0:
function update_loading(e:Event):void
{
var total:Number = stage.loaderInfo.bytesTotal + (113 * 1024) + css_loader.bytesTotal;
var loaded:Number = stage.loaderInfo.bytesLoaded + rss_loader.bytesLoaded + css_loader.bytesLoaded;
if (total == loaded)
{
updatePicture(360);
loading_mc.perc.text = "100%";
removeEventListener(Event.ENTER_FRAME,update_loading);
nextFrame();
}
else
{
var deg:Number = (loaded / total) * 360;
updatePicture(deg);
loading_mc.perc.text = String(int((loaded / total) * 100))+"%";
}
}
这是RSS导入代码,但我不相信它非常相关:
var rss_xml:XML = new XML();
var post_xml:XML = new XML();
var page_xml:XML = new XML();
var rss_loader:URLLoader;
rss_loader = new URLLoader(new URLRequest("http://news.sulsc.org/feed"));
function rss_loaded(e:Event):void
{
rss_xml = XML(e.target.data);
var rss_raw:String = String(rss_xml);
rss_raw = rss_raw.split(":encoded").join("");
rss_raw = rss_raw.split("\n").join("");
rss_raw = rss_raw.split('<p style="text-align: right;">').join('<p class="right">');
rss_raw = rss_raw.split('<p style="text-align: center;">').join('<p class="centre">');
rss_raw = rss_raw.split('<p style="text-align: left;">').join('<p class="left">');
rss_raw = rss_raw.split('<p style="text-align: justify;">').join('<p class="just">');
var heading_replace:RegExp = new RegExp("(</h[0-9]>)(<h[0-9]>)","g9");
var underline_replace:RegExp = new RegExp('<span style="text-decoration: underline;">(.*?)</span>',"gi");
var bold_replace:RegExp = new RegExp('<strong>(.*?)</strong>',"gi");
var italic_replace:RegExp = new RegExp('<em>(.*?)</em>',"gi");
rss_raw = rss_raw.replace(heading_replace,'$1<p class="space"></p>$2');
rss_raw = rss_raw.replace(underline_replace,'<u>$1</u>');
rss_raw = rss_raw.replace(bold_replace,'<b>$1</b>');
rss_raw = rss_raw.replace(italic_replace,'<i>$1</i>');
var page_test:RegExp = new RegExp("http://(news.|www.|)sulsc\\.org/(|wordpress/)\\?page_id=[0-9]+","gi");
page_xml = XML(rss_raw);
post_xml = XML(rss_raw);
rss_xml = null;
for (var i:uint; i<post_xml.channel.item.length(); i++)
{
if (page_test.test(post_xml.channel.item[i]) == true)
{
post_xml.channel.item[i] = "";
i--;
}
if (i == post_xml.channel.item.length()-1)
{
rss_loader.bytesLoaded = 113 * 1024;
}
}
}
答案 0 :(得分:0)
bytesTotal
需要哪个标题,但我确实提出了一个快速的解决方法。
this.urlLoader.addEventListenever( HTTPStatusEvent.HTTP_RESPONSE_STATUS, this.statusResponse );
private function statusResponse(e:HTTPStatusEvent = null):void{
for ( var i:Number = 0; i < e.responseHeaders.length; i++ ) {
var current:Object = e.responseHeaders[i];
if ( current.name.toLowerCase() == "content-length" ) {
this.bytesTotal = current.value;
break;
}
}
}
这对我有用,虽然它显然依赖于服务器发送Content-Length
标题。