AS3 Flash - 通过ExternalInterface渲染html

时间:2012-11-29 14:53:56

标签: javascript actionscript-3 encoding cjk externalinterface

这是我关于Stack Overflow的第一个问题。这不是我第一次写一个,但通常我会找到一个使用搜索栏的解决方案,这次我没有。我正在解决的问题有点复杂,所以我会尝试尽可能彻底。

基本上我们将中文付款添加到Flash中已有的电子商务中。整个网站都在AS3中,使用SWFObject嵌入,已经使用ExternalInterface进行其他操作。

这种新的中国支付方式有点过时,所以他们有一种奇怪的处理方式。一旦我们向他们的服务器发送了包含所有订单详细信息的POST,他们就会回复一个HTML页面。我的问题是渲染这个页面,考虑到我在Flash中收到它。

我正在尝试的解决方案部分工作,这意味着我能够看到页面,但应该在页面中的中文字符显示得很糟糕。而不是中文字符我看到奇怪的字符,所以我猜测当我将HTML从Flash传递给Javascript时必定存在编码问题。这就是我的做法:

AS3:

//extract html page from response
var newHTML:String = e.currentTarget.data;
//trim whitespace to avoid javascript error
newHTML = newHTML.replace(/\n/g, '');
newHTML = newHTML.split("\r").join("");

if(ExternalInterface.available)
  ExternalInterface.call("chinesePayment('"+newHTML+"')");
else
  trace("External interface error");

使用Javascript:

function chinesePayment(param) {
  var newWindow = window.open();
  //var unescaped = unescape(param);
  newWindow.document.write(param);
}

我已经尝试过使用unescape,escape,URIencoding,但没有任何成功,所以我真的希望你能帮助我在这里!

谢谢, 多梅尼科

编辑:

我只想提一下,我从他们的服务器上收到了正确的HTML页面。我尝试在本地保存页面,直接从服务器响应中复制HTML代码,并正确地查看页面。这意味着在将页面从AS3传递到Javascript的过程中必定存在问题。

EDIT2!important:

我意识到问题出在弹出编码中。当我从弹出窗口复制HTML时,将其粘贴到编辑器中并保存,我可以正确查看HTML。好像弹出窗口不考虑gbk编码。我现在正在寻找解决这个问题的方法。

1 个答案:

答案 0 :(得分:2)

我终于找到了解决方案!!!!

基本上我必须在flash中渲染中文字符,这样当我将它们传递给javascript时,它们已经被编码了。首先,我必须将URLLoaderDataFormat的类型更改为BINARY,以便我收到byteArray:

my_loader.dataFormat = URLLoaderDataFormat.BINARY;

收到回复后,我就这样修改了代码:

        var bytes:ByteArray = e.currentTarget.data;
        var newHTML:String = bytes.readMultiByte(bytes.length,"gb2312");
        //trim whitespace to avoid javascript error
        newHTML = newHTML.replace(/\n/g, '');
        newHTML = newHTML.split("\r").join("");

        if(ExternalInterface.available)
            ExternalInterface.call("chinesePayment('"+newHTML+"')");
        else
            trace("External interface error");

正如您所看到的,由于特定的byteArray函数,我可以使用首选的字符集读取响应,现在它可以工作了!

javascript保持不变,没有unescape或similars。通过这种方式,javascript函数接收到一个包含中文字符的字符串,而不是等效的utf字符。

感谢大家,您帮我解决了问题!