0

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

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

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

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

4

2 回答 2

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__");
}
于 2011-12-05T07:08:38.460 回答
0

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

第二个是获取插件 .dll 文件的路径,然后按照网站上的说明计算 config.txt 相对于该文件的位置。

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

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

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

于 2011-12-02T17:00:45.570 回答