Flash中打开链接绕过弹出窗口阻拦程序的方法

简介:

如果设置了弹出窗口阻拦,在Flash中打开链接,会被拦住,这对在Flash中嵌入广告不是一个好消息,好在可以通过iframe hack可以绕过这一限制,昨天折腾了大半天,总算搞定了。至于iframe hack的原理是什么,不需要明白,我们只需要吃鸡蛋,不用管鸡长的什么样子。有几个Flash lib 封装了iframe hack,如收费的flexcapacitor和免费的 flex-iframe 。

使用flex-iframe之后,解决起来就很简单了:

(1)首先,设置 flash 程序的属性 wmode 为 transparent ,这样flash程序就挡不住iframe层了,否则的话,动一下flash,iframe层就看不见了。

(2)接下来,我们建一个广告的容器,假设是继承自VBox的class Ad,在Ad中放一个IFrame进去,IFrame连向广告页面,这里做演示用,就直接连向www.google.com了:

<?xml version="1.0" encoding="utf-8"?> 
<mx:VBox xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 
         width="400" height="300" 
         xmlns:code="http://code.google.com/p/flex-iframe/" 
         > 
    <fx:Declarations> 
        <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
    <code:IFrame id="ad0" width="100%" height="160" source="http://www.google.com"
    </code:IFrame> 
</mx:VBox>

把它嵌入到界面中,成功运行得到:

image看起来不错,是吗?试着点击一下,可以直接打开。

问题是,这个iframe在Flash之上,如果Flash弹出一个窗口,则这个广告会拦在新窗口之上,请看:

image

设置Ad的visible是不行的,Ad的visible控制不了外面iframe的visible,iframe的visible需要有IFrame对象来控制,因此,需要第三步。

(3)控制可见性

对Ad类增加方法,控制iframe的可见性:

<?xml version="1.0" encoding="utf-8"?> 
<mx:VBox xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 
         width="400" height="300" 
         xmlns:code="http://code.google.com/p/flex-iframe/" 
         creationComplete="init()"> 
    <fx:Declarations> 
        <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
    <fx:Script> 
        <![CDATA[ 
            private static var _show : Boolean = false; 
            public static function rotateAds():void 
            { 
                //TODO: 
            } 
            public static var instance : Ad;

            public static function show():void 
            { 
                if(instance == null) return; 
                _show = true; 
                instance.setFrameVisible(true); 
            } 
            public static function hide():void 
            { 
                if(instance == null) return; 
                _show = true; 
                instance.setFrameVisible(false); 
            }

            protected function init():void 
            { 
                instance = this; 
                ad0.visible = _show; 
            } 
            private function setFrameVisible(val:Boolean):void 
            { 
                ad0.visible = val; 
            } 
        ]]> 
    </fx:Script> 
    <code:IFrame id="ad0" width="100%" height="160" source="http://www.google.com" visible="false"> 
    </code:IFrame> 
</mx:VBox>

当需要显示时show一下,需要隐藏时hide一下即可。当然,您也可以给Ad加一个属性进行绑定。

本文转自xiaotie博客园博客,原文链接http://www.cnblogs.com/xiaotie/archive/2010/10/04/1841806.html如需转载请自行联系原作者


xiaotie 集异璧实验室(GEBLAB)


相关文章
|
供应链 数据可视化 搜索推荐
数据分析案例-顾客购物数据可视化分析
数据分析案例-顾客购物数据可视化分析
465 1
|
12月前
|
存储 编译器 C语言
深入计算机语言之C++:类与对象(上)
深入计算机语言之C++:类与对象(上)
|
Python
【Leetcode刷题Python】1467. 两个盒子中球的颜色数相同的概率
本文介绍了LeetCode第50题"Pow(x, n)"的解法,题目要求实现计算x的n次幂的函数,文章提供了递归分治法的详细解析和Python实现代码。
165 0
|
SQL 前端开发 API
前端需要学GraphQL 吗?
前端需要学GraphQL 吗?
133 2
|
JavaScript 前端开发 算法
通过vue2完成表格数据的渲染展示以及vue2的生命周期及小结
通过vue2完成表格数据的渲染展示以及vue2的生命周期及小结
138 0
|
Java API
既然阻塞 I/O 会使线程休眠,为什么 Java 线程状态却是 RUNNABLE?
使用 Java 阻塞 I/O 模型读取数据,将会导致线程阻塞,线程将会进入休眠,从而让出 CPU 的执行权,直到数据读取完成。这个期间如果使用 jstack 查看线程状态,却可以发现Java 线程状态是处于 RUNNABLE,这就和上面说的存在矛盾,为什么会这样? 上面的矛盾其实是混淆了操作系统线程状态与 Java 线程状态。这里说的线程阻塞进入休眠状态,其实是操作系统层面线程实际状态。而我们使用 jstack 查看的线程状态却是 JVM 中的线程状态。 线程是操作系统中一种概念,Java 对其进行了封装,Java 线程本质上就是操作系统的中线程,其状态与操作系统的状态大致相同,但还是存在
既然阻塞 I/O 会使线程休眠,为什么 Java 线程状态却是 RUNNABLE?
|
存储
LeetCode 取经之路——第三题-无重复长度的最长子串
LeetCode 取经之路——第三题-无重复长度的最长子串
98 1
|
SQL 资源调度 关系型数据库
06-PDI(Kettle)读取Hive写入HDFS,读取HDFS写入HBase中(下)
文章目录 06-PDI(Kettle)读取Hive写入HDFS,读取HDFS写入HBase中 环境准备 1.安装MySQL 1.1mysql安装参考: 1.2安装过程
06-PDI(Kettle)读取Hive写入HDFS,读取HDFS写入HBase中(下)
|
机器学习/深度学习 传感器 算法
【预测模型-ANN预测】基于布谷鸟优化人工神经网络算法实现数据预测附matlab代码
【预测模型-ANN预测】基于布谷鸟优化人工神经网络算法实现数据预测附matlab代码
|
Ubuntu Shell Linux
AI开发软件环境
AI开发软件环境
293 0
AI开发软件环境