2011-09-05 66 views
0

這是一個簡單的擴展,它調用Xmlhttprequest將POST數據發送到表單。我還在js代碼的開始/結尾處添加了簡單的消息框...代碼正在從後臺頁面調用,並且已在manifest.json中授予了正確的權限。 但是,當我點擊這個擴展按鈕時,什麼都沒有發生。谷歌瀏覽器擴展不起作用

下面給出的是了與擴展

alert("Beginning of code block"); 
var xmlhttp; 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.open("POST","http://taurusarticlesubmitter.appspot.com/sampleform",true); 
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
xmlhttp.send("name=Arvind&description=Test description&[email protected]"); 
alert("End of code block"); 

而且JS代碼,添加以下代碼background.html--

<script> 
    // Called when the user clicks on the browser action. 
    chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(
     null, {file: "cdr.js"}); 
    }); 

    chrome.browserAction.setBadgeBackgroundColor({color:[0, 200, 0, 100]}); 


</script> 

最後,如下是我的manifest.json -

{ 
    "name": "My Second Extension", 
    "version": "1.0", 
    "background_page": "background.html", 
    "description": "The second extension that I made.", 
    "browser_action": { 
     "name": "Data in iframe", 
     "default_icon": "icon.png" 
}, 
"permissions": [ "tabs", 
     "bookmarks", 
      "http://*/*", 
      "https://*/*", 
      "unlimitedStorage" 
    ] 
} 
+0

爲什麼你有ie6和ie5後備代碼,如果這應該是一個鉻擴展? – Eduardo

+0

你是對的,我從代碼中刪除了ie6/ie5部分...謝謝... – user893664

回答

1

我假設你的第一個代碼塊是cdr.js?然後你是而不是從後臺頁面運行它。相反,您的後臺頁面會加載試圖發送請求的內容腳本。內容腳本以其已注入頁面的特權運行。因此,如果該頁面沒有權限向taurusarticlesubmitter.appspot.com發送請求,那麼內容腳本也不具有必要的權限。

如果您的內容腳本需要執行特權操作(例如向第三方頁面發送請求),它應該爲send a message to the background page,後臺頁面必須這樣做。

+0

你好,我明白的是,在內容腳本中我可以有這樣的東西 - chrome.extension.sendRequest({greeting: 「hello」},function(response){console.log(response.farewell); });在bg頁面,監聽器是這樣的 - chrome.extension.onRequest.addListener( function(request,sender,sendResponse){ console.log(sender.tab? 「from a content script:」+ sender.tab的.url: 「從擴展」);如果 (request.greeting == 「你好」) sendResponse({告別: 「再見」}); 否則 sendResponse({}); //冷落他們 }); 我正確嗎?謝謝 – user893664

+0

是的,這就是內容腳本和背景頁面之間交換消息的方式。 –

+0

你好,我還有一個查詢 - 我希望內容腳本只有在用戶點擊擴展按鈕後纔將其消息發送到後臺頁面 - 這可能嗎?我該怎麼做呢?謝謝,Arvind。 – user893664