Flash Player for Firefox Plugin 本機路徑 Bug @ Ticore's Blog :: 隨意窩 Xuite日誌
  • Site Search
  • Google
    Web Ticore's Blog
  • 最新文章
  • Recent Comments
  • 2006-12-12 23:00 Flash Player for Firefox Plugin 本機路徑 Bug
    平均分數:0 顆星    投票人數:0
    我要評分:

    Flash Player for Firefox Plugin 本機路徑 Bug

    在本機硬碟上用 Firefox 瀏覽器播放含有中文路徑的 Flash Movie 時
    用 NetStream.play 或是 Sound.loadSound 命令讀取外部檔案失敗
    但是改用絕對路徑卻是OK

    後來發現 Flash Player for Firefox Plugin 的 _url 有 Bug

    以下分別用 IE、Firefox 撥放中文路徑下的 Flash Movie
    測試 ActionScript _url 屬性

    IE:

    Firefox:

    在 Firefox 上,_url 中文部分為亂碼
    是編碼錯誤

    ActionScript 1.0、2.0 雖然無法做到各種編碼轉換
    但是利用 System.useCodepage、escape、unescape
    至少可以做到 UTF-8 與 OS Default Charset 之間的轉碼

    以下便是利用 AS 轉碼,修正中文路徑的問題

    ActionScript Class:

    class idv.ticore.as2.utils.URLFix {
    public static function encodeUtf8(s:String):String {
    var useCodepage:Boolean = System.useCodepage;
    System.useCodepage = true;
    var escapeStr:String = escape(s);
    System.useCodepage = false;
    var resultStr:String = unescape(escapeStr);
    System.useCodepage = useCodepage;
    return escapeStr;
    }
    public static function encodeOSCharset(s:String):String {
    var useCodepage:Boolean = System.useCodepage;
    System.useCodepage = false;
    var escapeStr:String = escape(s);
    System.useCodepage = true;
    System.useCodepage = useCodepage;
    return escapeStr;
    }
    public static function fixUrl(s:String):String {
    var useCodepage:Boolean = System.useCodepage;
    System.useCodepage = false;
    var result:String = unescape(encodeUtf8(s));
    System.useCodepage = useCodepage;
    return result;
    }
    public static function getFixedUrl(s:String):String {
    if (System.security.sandboxType == "remote") {
    return s;
    }
    if (System.capabilities.playerType != "PlugIn") {
    return s;
    }
    var useCodepage:Boolean = System.useCodepage;
    System.useCodepage = false;
    var url:String = fixUrl(unescape(_url));
    System.useCodepage = useCodepage;
    var urlToken:Array = url.split("/");
    urlToken.pop();
    return urlToken.join("/") + "/" + s;
    }
    }

    使用方式:

    import idv.ticore.as2.utils.*;

    var nc:NetConnection = new NetConnection();
    nc.connect(null);
    var ns:NetStream = new NetStream(nc);
    var video:Video;
    video.attachVideo(ns);

    ns.play(URLFix.getFixedUrl("video.flv"));

    相關參考資料:

    Flash 獨立撥放器中文路徑問題


    2007/01/04 updated

    經 kumas 測試,此方式只對部分中文字有效

    某些中文路徑,還是會有解碼問題。 例如:

    c:test多國語言路徑

    URLFix.getFixedUrl("video.flv"); 回傳 c:testvideo.flv
    查出在 URLFix.fixUrl(unescape(_url)); 解成亂碼。

    註:測試版本 Firefox 2.0 + Flash player 9

    Ticore / Xuite日誌 / 回應(0) / 引用(0) / 好文轉寄
    回應