我正在尝试在我的 Chrome 扩展程序中打开一个要解析的文件,比如“config.txt”。
通过Javascript,这将相当容易。例如:chrome.extension.getURL('config.txt')
会得到类似chrome-extension://kfcphocilcidmjolfgicbchdfjjlfkmh/config.txt
.
但是,在扩展的 C++(或 C)代码中,不能通过这种 URL 打开文件。
在这种情况下,有没有办法以扩展名打开文件?
我正在尝试在我的 Chrome 扩展程序中打开一个要解析的文件,比如“config.txt”。
通过Javascript,这将相当容易。例如:chrome.extension.getURL('config.txt')
会得到类似chrome-extension://kfcphocilcidmjolfgicbchdfjjlfkmh/config.txt
.
但是,在扩展的 C++(或 C)代码中,不能通过这种 URL 打开文件。
在这种情况下,有没有办法以扩展名打开文件?
我终于设法通过 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__");
}
有两种方法可以解决这个问题;第一种是简单地使用 javascript 获取路径,然后在方法调用中将其传递给插件。
第二个是获取插件 .dll 文件的路径,然后按照网站上的说明计算 config.txt 相对于该文件的位置。
我想另一种选择是尝试使用:
m_host->getDOMWindow()->getNode("chrome")->getNode("extension")->getNode("getURL")->callMethod<FB::variant>("", FB::variant_list_of("config.txt");
我不知道这是否真的有效;我没有尝试过,我什至可能打错了一些函数调用,但它可能值得一试。