我有一个 SWF,其中包含一些通过ExternalInterface 定义的可公开访问的方法。有些方法允许用户更改 SWF 中的文本和图像。另一种方法获取 SWF 的“快照”——它根据当前可见的内容生成 JPG 图像,然后调用 JavaScript 中的全局函数,并将快照的二进制数据作为函数的参数。数据不是base64或任何其他格式;它只是作为字符串的原始字节。
function updateSwfElement(elementID, val) {
document.getElementById("theSwf").updateElement(elementID, val);
}
function takeSnapshot() {
document.getElementById("theSwf").takeSnapshot(); // returns undefined
}
function snapshotComplete(data) {
// this function is called asynchronously by Flash after takeSnapshot()
// has completed.
// "data" contains the image's bytes. typeof(data) === "string" .
doSomethingWithTheData(data);
}
现在事实证明,对于一组非常特定的 updateElement() 调用,调用“takeSnapshot()”将抛出可怕的 SyntaxError: Unexpected token ILLEGAL
消息。 snapshotComplete
内设置的断点不会触发。
请注意,这与其他人遇到的问题不同,即“gremlin”进入其源代码(从 JSFiddle 或其他内容复制/粘贴),从而导致语法错误。源文件没有任何问题。不知何故,在 SWF 上调用此方法会使 JS 阻塞。
我的直觉是,尝试将原始字节硬塞到字符串中是一个坏主意,并且我已指示 SWF 作者对输出进行 Base64 编码。但我想不出一个好的方法来证明我是对的。
您认为这里发生了什么?测试它的好方法是什么?
最佳答案
如果您不是 swf 文件的作者,您可以编写自己的 swf 包装器并从此包装器 swf 调用方法,然后转换为 base64 并返回 javascript。是的,这有点棘手:)
关于javascript - 调用FlashExternalInterface方法时出现疯狂 "unexpected token illegal"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22616594/