我想要做的是
snapText = scrollPane.source.textSnapshot;来自外部的主权财富基金。我试过:
trace("-->: "+scrollPane.source.textSnapshot.getText(0, 1000));
trace("-->: "+myLoader.content.textSnapshot.getText(0, 1000));
trace("-->: "+mc.textSnapshot.getText(0, 1000));
trace("-->: "+mc.getChildAt(0).textSnapshot.getText(0, 1000));
trace("-->: "+mc.getChildByName(myLoader).textSnapshot.getText(0, 1000) );
trace("-->: "+scrollPane.content.textSnapshot.getText(0, 100));所有这些都是徒劳的。顺便说一下:
mc.getChildAt(0).textSnapshot.getText(0, 1000)抛出错误:
1119: Access of possibly undefined property textSnapshot through a reference with static type flash.display:DisplayObject.虽然我知道方法在那里。
以上所有代码都在函数checkHandler中运行:
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, checkHandler);所以主权财富基金应该是完全装载的。文本也在那里,我已经用swf反编译器检查过了。带有加载程序的电影页是这样创建的
scrollPane = MovieClip(root).scrollPaneOnStage;
myLoader.load(new URLRequest("tmp1.swf"));
mc.addChild(myLoader);
scrollPane.source = mc;提前谢谢!
更新--仍未解析
正如HotN所指出的,我现在正在访问swf。
function checkHandler(evt:Event):void {
libMC = evt.target.content as MovieClip;
libMC.gotoAndStop(0);
trace(libMC.textSnapshot.getText(0, 100));
snapText = libMC.textSnapshot;
scrollPane.source = mc;
}这首先导致错误,因为as3脚本中的加载程序无法加载as2电影(即。AVM1)。因此,我创建了一个AVM2 swf,它导致了错误:Error #2000: solution。作为解决方案,我使用http://www.igorcosta.org/?p=231中的一个类加载swf,但仍然不能访问textSnapshot:
trace(libMC.textSnapshot.getText(0, 100));不返回任何东西,也不抛出错误!
顺便说一句:虽然我可以改变swf的格式,但我不能真正改变文件本身,因为它是自动生成的。
发布于 2011-10-24 16:55:31
所以这件事花了我太长时间,但我弄明白了。
//... {
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, checkHandler);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError);
var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
context.checkPolicyFile = false;
loader.load(new URLRequest("tmp1.swf"), context);
//..... }
function checkHandler(evt:Event):void {
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,checkHandler);
libMC = loader.content as MovieClip;
//works now!
libMC.textSnapshot.getText(100, 200);
scrollPane.source = libMC;
}所以诀窍是像很多次建议的那样使用标准的加载程序函数。然而,flash在某种程度上扰乱了本地pc上的安全性/沙箱设置,这导致了错误#2000:没有活动的安全上下文。但是,当上传到远程服务器时,它仍然工作得很好,这很奇怪。您可以在“文件”>“发布设置”下将本地播放设置为“只访问本地文件”,但这在我的情况下根本没有帮助.
发布于 2011-10-17 00:46:00
为了在加载的swf中引用任何内容,您需要遍历加载器的内容。这会让你得到这样的参考:
function checkHandler(e:Event):void {
var loadedSWF:Object = e.target.content;
}通过浏览loadedSWF,您可以获得swf的内容,假设它们设置为公共可见性。
发布于 2011-10-17 14:51:44
您正在使用TLF引擎( textfields)吗?Flash CS5 TLF引擎在加载SWF并试图访问那些加载的SWF的属性或方法时会导致一些错误。您可以在史蒂文·萨克斯的这篇博客文章中阅读到有关这方面的所有内容。
如果是这样的话,解决方案非常简单:将TextField更改为常规字段(它被命名为经典文本,TextField属性面板上有一个选择器),并且(希望)一切都能正常工作,没有进一步的代码更改。
如果您需要TLF文本,并且无法处理常规文本,您可以在这个Adobe Technote中找到一些解决方案(更像是解决方案,但无论如何)。
希望这能有所帮助!
https://stackoverflow.com/questions/7787843
复制相似问题