如何通过C / C ++打开包含在Chrome扩展中的文件?

时间:2011-12-01 09:30:38

标签: google-chrome-extension npapi firebreath

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

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

但是,在扩展的C ++(或C)代码中,通过这种URL打开文件是不可用的。

在这种情况下,有没有办法在扩展名中打开文件?

2 个答案:

答案 0 :(得分:0)

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

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

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

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

我不知道这是否真的有效;我没有尝试过,我甚至可能错误地输入了一些函数调用,但它可能值得一试。

答案 1 :(得分:0)

我终于找到了通过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__");
}