在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