在Chrome扩展中,如何注入项目到第三方Flash对象的上下文菜单中?向第三方Flash对象注入上下文菜单项
是否可以使用JavaScript简单地注入项目?
是否有可能将玩家包装在一个容器.swf中,该容器添加了我们的上下文菜单项以及原始swf中包含的项目?
非常感谢您的想法和灵感!
编辑:要明确,我想要做的扩展是添加一个上下文菜单项到任何第三方Flash程序。举例来说,如果用户访问YouTube,我想添加自己的菜单项以及YouTube的自定义项目。
在Chrome扩展中,如何注入项目到第三方Flash对象的上下文菜单中?向第三方Flash对象注入上下文菜单项
是否可以使用JavaScript简单地注入项目?
是否有可能将玩家包装在一个容器.swf中,该容器添加了我们的上下文菜单项以及原始swf中包含的项目?
非常感谢您的想法和灵感!
编辑:要明确,我想要做的扩展是添加一个上下文菜单项到任何第三方Flash程序。举例来说,如果用户访问YouTube,我想添加自己的菜单项以及YouTube的自定义项目。
最简单的解决方案就是完成你和@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;
和Loader 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;
不幸的是我不能在星期一之前测试它。但是,赏金是你的真诚,这个代码实际上起作用;) – bloudermilk
我不认为你可以编辑这些上下文菜单,说实话。但是我的闪存知识已经过时了,所以事情可能已经发生了变化。但是,为什么不解析页面,抓取要共享的视频并直接共享?取决于网站,许多提供您可以使用的信息。
感谢您的回复。oEmbed支持是我们很快添加的,但我们希望注入上下文菜单项以简化UX。我们的竞争对手喜欢覆盖式界面,我们不是粉丝。 – bloudermilk
我能想到的唯一解决方案是有一个加载器swf,它将加载所需的swf,这样你可以包装所需的应用程序并且可以完全访问上下文菜单。
这是我们认为可行的解决方案。你能提供一个有效的例子吗?如果可以的话,赏金是你的! – bloudermilk
这看起来像文档中的相关页面。我没有设置Flash开发环境,否则我会自己尝试。 http://kb2.adobe.com/cps/141/tn_14190.html – bloudermilk
事实上,你发现的链接有你需要写一个swf加载器并包装你的目标swf。如果没有你的项目的确切细节,我不能给你提供比你能找到的更多的信息,如果你能更好地解释你需要什么,我可能可以进一步帮助你。 – felipemaia
我不认为这是不可能的,除非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游戏出现在一些网站那是在我的上下文菜单中注入广告或某种亵渎。这不会让我看起来很好。
不幸的是,我不能控制原始的Flash文件。尽管感谢您的意见! – bloudermilk
因此,基本上你是在一个html上下文中,你的应用程序包装用户的web浏览器(类似谷歌翻译翻译网页)?您想要捕捉网页中的所有Flash电影,并用更改后的ContextMenu替换您的电影? – felipemaia
@felipemaia没错。我将使用jQuery抓取所有'
我认为这根本就行不通...只要加载的swf试图加载任何外部的东西或者在其上下文之外的任何东西上执行,就会遇到无穷无尽的问题和可能无法解决的问题。 – Cay