代码之家  ›  专栏  ›  技术社区  ›  sblom

如何确定哪个页面承载我的swf?

  •  1
  • sblom  · 技术社区  · 14 年前

    3 回复  |  直到 14 年前
        1
  •  3
  •   Juan Pablo Califano    14 年前

    你想要的东西没有防弹的方法。

    最常见和最简单的方法是:

    ExternalInterface.call 调用javascript返回localation。

    var location:String = ExternalInterface.call('window.location.href');
    

    2) 在HTML嵌入代码中将flashvar传递给swf。

    欺骗:

    allowscriptaccess 到“*”(每个人)。

    在flashvars的情况下,数据必须通过嵌入代码传递。但您通常不控制此代码,因此它在某些情况下可能有效,但在其他情况下无效。

    有第三种方法(可能还有其他方法)是相当黑客和更多的参与,但我实际上用过一次,工作得很好。基本思想是这样的。与其直接为swf提供服务,不如让嵌入代码加载一个可以控制服务器端的页面。我们称之为yoursite.com/loader.php文件。这个脚本获取http referer并将其传递给您的swf(注意:是的,http referer不是必需的,可能在请求中不存在或被欺骗;在正常情况下,这不是一个实际问题,因为大多数浏览器确实发送此数据)。

    现在,这是棘手的部分。你必须以某种方式将数据写入你的swf。有一些选项可以在服务器端动态编译swf。您还可以尝试解析swf格式(它有相当多的文档)。但这似乎有点过分,因为我正试图这么做(我的意思是,对服务器的过度杀伤力)。

    0123456789 $END\u PLACEHOLDER$”,其中“0123456789”只是一个重复的填充符,以使占位符足够大;为了安全起见,我有一个1000字节的字符串或类似的字符串;这必须是actionscript代码中的一个文本字符串,否则它将被编译为多个常量,而您将无法在swf二进制文件中找到它)。

    现在,为了工作,加载程序被导出为一个“未压缩”的swf。如果它是压缩的,你必须先解压,等等,还有,这是我使用加载程序swf的方式,而不是在真正的应用程序中这样做;加载程序本身很小,所以它没有被压缩并不重要,但是真正的应用程序不能被解压。

        2
  •  1
  •   Casey Pugh    12 年前

    为了在每一个案例中获得推荐人,你必须动态生成一个SWF shell。这类似于Juan在SWF中替换字符串的方法,但更安全、更简单。

    http://www.libming.org/

    使用Ming库生成一个SWF,其中包含烧入的referer和您想要的任何其他参数。Ming是用C语言编写的,可以用PHP、Ruby等语言使用。

    这种方法可能被大多数像YouTube和Vimeo这样的大男孩用于视频分发和跟踪。

        3
  •  0
  •   Lars Blåsjö    14 年前

    获取承载swf的页面的URL的唯一方法是通过ExternalInterface调用,该调用可以执行JavaScript来获取窗口位置. 有几个问题,所以你可以找到它的细节。