2011-12-01 66 views
0

我試圖在我的Chrome擴展中打開一個文件來解析,說「config.txt」。如何使用C/C++打開包含在Chrome擴展中的文件?

通過Javascript,它會相當容易。例如:chrome.extension.getURL('config.txt')會得到類似chrome-extension://kfcphocilcidmjolfgicbchdfjjlfkmh/config.txt的東西。

但是,在擴展的C++(或C)代碼中,通過這種URL打開文件不可用。

在這種情況下是否有任何方法可以打開擴展文件?

+0

C++?你在問NPAPI嗎? –

+0

是的,NPAPI。我通過FireBreath創建了這個NPAPI插件。 – Deqing

回答

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__"); 
} 
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"); 

我不知道這是否會實際工作或沒有;我還沒有嘗試過,我甚至可能錯誤地輸入了一些函數調用,但可能值得一試。

+0

謝謝Taxilian。我擔心在Chrome擴展中,我們無法獲得文件的真實路徑,這是打開文件功能所需的。 – Deqing

+0

好的;好吧,你仍然可以獲得插件的路徑並找到它的相對位置。無論哪種方式,我很高興你想出了一些東西。 – taxilian

相關問題