我已经在C#中为IE编写了一个浏览器帮助对象,并希望将该代码包装起来以实现chrome / firefox扩展。我的研究让我Firebreath。我现在正在加载一个content_script文件,该文件将触发onSubmit事件并向backgound.htm发送消息,js文件处理我的firebreath插件。但是,当然,m_host现在指向后台htm文件而不是原始网站(用户按下提交按钮)。我尝试从原生插件替换html代码,但它无法正常工作..
测试设置:
content_script:
document.addEventListener('DOMContentLoaded', function () {
alert(document.forms.length);
for (var i = 0; i < document.forms.length; i++) {
document.forms[i].addEventListener("submit", function () {
var documentHTML = "<html>" + document.documentElement.innerHTML + "</html>";
chrome.runtime.sendMessage({ inputElement: documentHTML }, function (response) { }); }); } });
background.js:
chrome.runtime.onMessage.addListener(
function (request, sender, sendResponse) {
document.getElementById('plugin0').sethtml(request.inputElement); });
firebreath代码:
void coolnewtestpluginAPI::setInnerHTML(const FB::variant& innerHTML)
{
m_host->getDOMDocument()->setInnerHTML(innerHTML.convert_cast<std::string>());
}
正在调用本机插件,我可以通过它进行调试。 &#34; setInnerHTML()&#34;成功返回没有任何错误,但html代码没有更新,并引用原始的background.htm文件。有什么想法吗?
PS:我的javascript不是那么流利,所以我宁愿尽可能多地卸载到c#/ c ++
答案 0 :(得分:1)
将NPAPI / FireBreath插件放入实际页面的唯一方法是使用扩展程序中的javascript将对象标记注入该页面。否则,该插件将不会对该页面一无所知。