![](/img/trans.png)
[英]Porting XPCOM Firefox extension to Chrome extension with NPAPI plugin
[英]Invoking NPAPI plugin functionality from Firefox extension
我已經編寫了一個NPAPI插件,該插件實現了所需的所有邏輯,現在我正在編寫一個擴展程序,該擴展程序應使用該插件中提供的功能。 這種架構為我提供了為Mozilla Firefox和Google Chrome編寫相同的C ++代碼的機會。
在Chrome中,我通過將<embed ...>
結構寫入擴展名所擁有的單獨文檔中來實例化插件中定義的對象(它自動提供給Chrome插件)。 那行得通。 在C ++代碼中,我執行了插件對象的構造函數中所需的所有工作。
我無法輕松地使解決方案適應Firefox中的使用,因為該擴展名沒有任何單獨的文檔支持,並且該擴展名沒有寫任何已經呈現的文檔的權限。
最常見的形式是我的主要問題是如何多次使用插件提供的功能,並在用戶單擊按鈕或在下拉菜單中選擇我的條目時將參數列表傳遞給本機函數(即使用參數應在特定事件之后而不是僅在任意時間調用)?
“補充”問題是:
如何在Mozilla Firefox中實例化插件? 我在哪里可以得到FF“解釋”的文檔,以便該擴展名可以寫入該文檔?
我自己不知道該怎么做,但這是一個開源的Firefox擴展,可以做到這一點: https : //github.com/kylehuff/webpg-firefox
您的Firefox擴展程序需要使用“ 瀏覽器覆蓋 ”。 對於瀏覽器的各個部分,有多種類型的疊加層,它們會在chrome.manifest文件中定義的指定文檔內加載(疊加)。
例如,以下內容將覆蓋層應用於“ browser.xul”文件(這是瀏覽器主窗口)
overlay chrome://browser/content/browser.xul content/firefoxOverlay.xul
現在,在該覆蓋文件中,您可以加載插件對象並調用插件提供的方法。
這是一個示例XUL文件,除了加載內容類型為“ application / x-example-plugin”的NPAPI插件,並將該插件對象分配給變量“ myPlugin”外,它沒有做其他事情
<script type="text/javascript">
myPlugin = document.getElementById("myPlugin");
</script>
<?xml version="1.0" encoding="UTF-8"?>
<overlay id="myOverlay" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="text/javascript">
myPlugin = document.getElementById("myPlugin");
alert(myPlugin.someFunction());
</scrpit>
<window id="main-window">
<vbox collapsed="true">
<html:object id="myPlugin" type="application/x-example-plugin" height="1" width="1" style="visibility:hidden;"></html:object>
</vbox>
</window>
</overlay>
一些重要的注意事項
<em:unpack>true</em:unpack>
一旦您的疊加層在瀏覽器XUL的上下文中加載,並且插件在主瀏覽器窗口中初始化,您就可以在主窗口范圍內通過將變量分配給您的變量來引用插件(在此,“ myPlugin”例)。
我不會在這里深入了解如何獲取主窗口的上下文(請參閱下面的鏈接),但是一旦有了引用,就可以從內容腳本,側邊欄,工具欄等中調用公開的方法。
參考鏈接-
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.