Как открыть файл, который включает в расширение Chrome C / C ++? - PullRequest
0 голосов
/ 01 декабря 2011

Я пытаюсь открыть файл для анализа, скажем "config.txt", в моем расширении Chrome.

По Javascript это будет довольно просто. Например: chrome.extension.getURL('config.txt') получит что-то вроде chrome-extension://kfcphocilcidmjolfgicbchdfjjlfkmh/config.txt.

Однако в коде расширения C ++ (или C) открыть файл по этому типу URL невозможно.

Можно ли в этом случае открыть файл с расширением?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2011

Мне наконец-то удалось найти способ получить "config.txt" в моем плагине NPAPI с помощью XmlHttpRequest.

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__");
}
0 голосов
/ 02 декабря 2011

Есть два способа решить эту проблему; во-первых, просто использовать javascript для получения пути и передачи его в плагин при вызове метода.

Второй - получить путь к файлу .dll плагина, а затем рассчитать расположение файла config.txt относительно этого , как описано на сайте .

Полагаю, другой вариант - попытаться использовать:

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

Я не знаю, будет ли это на самом деле работать или нет; Я не пробовал, и, возможно, даже неправильно набрал некоторые вызовы функций, но, возможно, стоит попробовать.

...