【问题标题】:How to open a file which includes in Chrome extension by C/C++?如何通过 C/C++ 打开包含在 Chrome 扩展中的文件?
【发布时间】:2011-12-01 09:30:37
【问题描述】:

我正在尝试在我的 Chrome 扩展程序中打开一个文件进行解析,例如“config.txt”。

通过 Javascript,这将相当容易。例如:chrome.extension.getURL('config.txt') 会得到类似chrome-extension://kfcphocilcidmjolfgicbchdfjjlfkmh/config.txt 的内容。

但是,在扩展程序的 C++(或 C)代码中,无法通过这种 URL 打开文件。

在这种情况下,有什么办法可以在扩展名中打开文件吗?

【问题讨论】:

  • C++?你问的是 NPAPI 吗?
  • 是的,NPAPI。我通过 FireBreath 创建了这个 NPAPI 插件。

标签: google-chrome-extension npapi firebreath


【解决方案1】:

有两种方法可以解决这个问题;第一种是简单地使用javascript获取路径,然后在方法调用中将其传递给插件。

第二个是获取插件.dll文件的路径,然后计算config.txt相对于as explained on the website的位置。

我想另一种选择是尝试使用:

m_host->getDOMWindow()->getNode("chrome")->getNode("extension")->getNode("getURL")->callMethod<FB::variant>("", FB::variant_list_of("config.txt");

我不知道这是否真的有效;我没试过,我什至可能打错了一些函数调用,但可能值得一试。

【讨论】:

  • 感谢出租车司机。恐怕在 Chrome 扩展中我们无法获得文件的真实路径,而这些打开文件功能需要。
  • 好的;好吧,你仍然可以得到插件的路径并找到它是相对的。不管怎样,我很高兴你想出了一些办法。
【解决方案2】:

我终于设法通过 XmlHttpRequest 在我的 NPAPI 插件中获取“config.txt”。

const char* getconfig =
" window.__config_txt__ = (function() {"
"     var ret = \"Default return value\";"
"     var xhr = new XMLHttpRequest();"
"     xhr.open(\"GET\", \"config.txt\", false);"
"     xhr.onreadystatechange = function() {"
"       if(xhr.readyState == 4) {"
"         ret = xhr.responseText;"
"       };"
"     };"
"     xhr.send();"
"     return ret;"
" })();";
m_host->evaluateJavaScript(getconfig);

if (window && window->getJSObject()->HasProperty("window")) {
    std::string content = window->getProperty<std::string>("__config_txt__");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-19
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多