将上下文菜单项注入第三方Flash对象

时间:2011-11-16 19:25:35

标签: javascript flash actionscript google-chrome-extension

在Chrome扩展程序中,如何将项目注入第三方Flash对象的上下文菜单中?

是否可以使用JavaScript简单地注入项目?

是否可以将玩家包装在容器中.swf添加我们的上下文菜单项以及原始swf包含的项目?

非常感谢您的想法和灵感!

编辑:要明确,我想要对我的扩展程序做的是向任何第三方Flash程序添加上下文菜单项。例如,如果用户访问YouTube,我想添加自己的菜单项以及YouTube的自定义项。

4 个答案:

答案 0 :(得分:3)

最简单的解决方案是完全按照您和@felipemaia的建议 - 使用加载器SWF添加(或修改)其加载的SWF的上下文菜单。

原始(加载)SWF:

import flash.ui.ContextMenu;
import flash.ui.ContextMenuItem;

var customContextMenu:ContextMenu = new ContextMenu();
// Comment in if you want to hide the default context menu items.
// customContextMenu.hideBuiltInItems();
var sampleItem:ContextMenuItem = new ContextMenuItem('Cheerio!');
customContextMenu.customItems.push(sampleItem, new ContextMenuItem('What it do?'));
this.contextMenu = customContextMenu;

装载机SWF:

import flash.ui.ContextMenu;
import flash.ui.ContextMenuItem;
import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, modify_context_menu);
loader.load(new URLRequest('LoadedSWF.swf'));

function modify_context_menu(event:Event):void
{
    var loadedSWF:Sprite = (event.target as LoaderInfo).content as Sprite;  
    var loadedContextMenu:ContextMenu = loadedSWF.contextMenu;  
    loadedContextMenu.customItems.push(new ContextMenuItem('Parent Menu Item'), new ContextMenuItem('Parent what it be?'));

    this.contextMenu = loadedContextMenu;
}

请注意,如果您需要更精细的颗粒控制,还可以修改单个InteractiveObject子类的上下文菜单:

var sprite:Sprite = new Sprite();
var spriteContextMenu:ContextMenu = new ContextMenu();
spriteContextMenu.customItems.push(new ContextMenuItem('Instance specific menu item!'));
sprite.contextMenu = spriteContextMenu;

答案 1 :(得分:0)

说实话,我不认为你可以编辑这些背景菜单。但是我的闪光知识已经过时了,所以也许事情已经发生了变化。

但是,为什么不解析页面,抓住要共享的视频,直接分享?根据网站的不同,很多都会提供您可以使用的oembed信息。

答案 2 :(得分:0)

我能想到的唯一解决方案是有一个加载器swf,它将加载所需的swf,这样你就可以包装所需的应用程序并拥有对上下文菜单的完全访问权。

答案 3 :(得分:0)

除非Flash文件中有一些代码可以使用flashvars来加载某些上下文项,否则我认为这是不可能的,例如:

function loadContext():void
{
    // Vars
    var cmi:Object = root.loaderInfo.parameters;

    contextMenu = new ContextMenu();
    contextMenu.hideBuiltInItems();

    for(var i:String in cmi)
    {
        var item:ContextMenuItem = new ContextMenuItem(i);

        item.addEventListener(
            ContextMenuEvent.MENU_ITEM_SELECT, 
            function(e:ContextMenuEvent):void
            {
                navigateToURL(
                    new URLRequest(cmi[i])
                );
            }
        );
    }

    contextMenu.customItems.push(item);
}

loadContext();

不希望我的Flash游戏出现在某些网站上,这些网站会在我的上下文菜单中注入广告或亵渎内容。那不会让我看起来很好。