如何检查swf flash文件是否实现了clickTAG ?


How do I check if an swf flash file implements clickTAG?

我们一直在开发一个附属系统,并希望以某种方式检测编译后的SWF广告是否实现了clickTAG。有什么方法可以自动化这个过程吗?

当我调试flash横幅时,我使用flasm (http://www.nowrap.de/flasm.html windows+linux)来反编译swf文件。您可以将输出输出到控制台(-d)或将其转储到文件:

$ flasm -d file.swf> out.txt

然后在文件/输出中搜索clickTag/clickTag。

    要求执行权限。

这是一个复杂的问题。

建议的解决方案只处理不正确的点击标签的情况(例如clicktag vs clicktag)。以下是其他潜在问题:-没有可点击层,没有点击标签代码-可点击层与硬编码的URL-可点击的图层只覆盖横幅的一小部分- AS3 (flash只支持AS2)

http://adopstools.net允许您提交SWF并检查clicktags以及其他内容

如果我正确理解了您需要做的事情,那么应该可以通过加载广告来构建一个半自动化的测试swf,然后模拟对其显示树中的所有内容的点击。

您可以使用URLRequest的data属性向加载的swf传递参数,如下所示:

var loader:Loader = new Loader();
var req:URLRequest = new URLRequest("ad.swf");
var clickTagURL:String = "http://www.example.com";
req.data = new URLVariables("clickTAG=" + clickTagURL + "&clickTag=" + clickTagURL + "&clicktag=" + clickTagURL);
loader.load(req);

(尽管您需要在浏览器或独立运行,因为Flash IDE抱怨查询字符串参数。)

然后可以递归地遍历触发点击的显示列表:

testClicks(loader.content as DisplayObjectContainer);
function testClicks(target:DisplayObjectContainer):void {
    var numC:uint = target.numChildren;
    for (var i:uint = 0; i < numC; i++) {
        target.getChildAt(i).dispatchEvent(new MouseEvent(MouseEvent.CLICK));
        if (target.getChildAt(i) is DisplayObjectContainer) {
            testClicks(target.getChildAt(i) as DisplayObjectContainer);
        }
    }
}

如果你将测试广告所在的文件夹设置为可信文件夹,或者使用调试播放器,你就可以看到这些点击是否会导致广告打开一个URL。

触发MOUSE_DOWNMOUSE_UP可能也是值得的,以防开发人员使用它们,显然这不会暴露像jdangu提到的非常小的点击区域这样的问题,但希望它作为一个基本的测试是有用的。

您可以使用像www.adbannerking.com这样的clicktag检查器,它将显示SWF文件中的clicktag。该软件甚至允许您相应地更改点击标签,而无需源文件(.fla)。同时,您可以检查/更改x数量的SWF文件在同一时间快速。