Вставка элемента контекстного меню в сторонний flash-объект - PullRequest
2 голосов
/ 16 ноября 2011

В расширении Chrome, как я могу вставлять элементы в контекстные меню сторонних flash-объектов?

Можно ли просто внедрять элементы с помощью JavaScript?

Можно ли обернутьигроки в контейнере .swf, который добавляет наш пункт контекстного меню вместе с элементами, включенными в оригинальный swf?

Большое спасибо за ваши идеи и вдохновение!

Редактировать: Чтобы было ясно, что я хотел бы сделать с моим расширением, это добавить пункт контекстного меню в любую стороннюю программу Flash.Например, если пользователь заходит на YouTube, я бы хотел добавить свой собственный пункт меню вместе с пользовательскими элементами YouTube.

Ответы [ 4 ]

3 голосов
/ 24 ноября 2011

Самое простое решение - сделать именно то, что вы и @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;
0 голосов
/ 21 ноября 2011

Единственное решение, которое я могу придумать, - это иметь загрузчик swf, который будет загружать требуемый swf, чтобы вы могли обернуть нужное приложение и получить полный доступ к контекстному меню.

0 голосов
/ 21 ноября 2011

Я не думаю, что это возможно, если файл 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();

Не хотел бы, чтобы моя флеш-игра появлялась на каком-то веб-сайте, который вставляет рекламу или что-то нецензурное в мое контекстное меню. Это не заставило бы меня выглядеть очень хорошо.

0 голосов
/ 18 ноября 2011

Не думаю, что вы можете редактировать эти контекстные меню, если честно. но мои знания в области флэш-памяти довольно сильно устарели, поэтому, возможно, все изменилось.

однако, почему бы не проанализировать страницу, не получить доступ к видео и поделиться им напрямую? в зависимости от сайта многие предоставляют открытую информацию, которую вы можете использовать.

...