2012-05-08 38 views
2

我正在嘗試構建Chrome的擴展程序,但我是新手,而且無法理解Google提供的文檔。我希望擴展名有一個彈出窗口,顯示幾個按鈕,當點擊一個按鈕時,我想運行一個腳本。從popup.html中,如何通過按鈕onclick運行javaxcript函數?

這是我的設置:

popup.html

<button id="test1" onclick="getSite();">button 1</button>
<button id="test2" onclick="getSite();">button 2</button>

content_script.js

function getSite(){alert('getSite works!');}

我無法理解如何使用鉻的JavaScript API,如我看到其他人說使用chrome.tabs.executeScript,但我無法弄清楚那條線的去向。誰能幫我?我會給你一個餅乾!或者只是一個upvote ..或者兩者兼而有之?

+0

以下兩個答案都是正確的。您不能使用內聯事件屬性,也不能在瀏覽器操作彈出窗口中引用內容腳本中的變量。在單獨的JS文件中使用'addEventListener',並使用消息傳遞通過您的背景頁面。 – apsillers

+0

Ohhh ..我想我只是想出來了,但在確認之前我會先測試一下。這是你如何使用'chrome.tabs.executeScript' 而不是隻輸入'alert('test');'你寫 'chrome.tabs.executeScript(null, {code:「alert('test' )「}); window.close();' – Jack

+0

這是正確的;你也可以使用'{file:「some_file.js」}'來注入一個完整的文件。每個選項卡都有一個用於擴展腳本的獨立執行環境,並且它們都與背景區分開。 'executeScript'是後臺頁面如何獲得特定的選項卡來運行代碼。 – apsillers

回答

1

我認爲你有這個問題是因爲Google Content Security Policy施加的限制。它提到iniline javascript就像你在代碼中提到的代碼不會被執行。嘗試從您的HTML標記中刪除onclick="getSite()"content_script.js。使用addEventListener函數將事件附加到按鈕。

+0

我這樣做了,它似乎有點工作。警報顯示,但它馬上消失。我猜我必須通過將消息傳遞給後臺頁面來嘗試。 – Jack

2

您還沒有提到您希望腳本運行在哪個頁面onclick,在Popup.html頁面或用戶目前正在瀏覽器上工作的頁面上。如果它只是您要執行腳本的popup.html page,請將其包含在popup.html頁面本身中。

如果要在用戶的瀏覽器頁面上執行它們,則必須將消息傳遞到背景頁面,該頁面依次執行chrome.tabs.executeScript,當前選項卡的ID和{file: 'yourjsfile.js'}作爲參數。

+0

在popup.html中嘗試此操作: '' 在體: '<按鈕ID = 「BUTTON3」> BUTTON3' 它沒有運行的功能。但是當我在content_script.js中引用相同的腳本時,彈出窗口會顯示,儘管簡短。我確信我做錯了什麼,所以我會繼續嘗試這一點,但如果你看到明顯的東西,請讓我知道! – Jack

+0

我從來沒有使用過事件'DOMContentLoaded'。你能嘗試嗎? 'window.onload'來代替它,並檢查它是否適用於你? –

+0

Jophin Joseph已經正確地提到了你不能在你的'popup.html'中使用內聯JavaScript的鏈接,你必須把所有的js放在一個文件中並加載它通過'

  • 11. 引導按鈕下拉菜單不會運行onclick函數?
  • 12. 如何通過onClick()觸發VB函數
  • 13. 如何通過用戶輸入和使用按鈕來運行JavaScript函數?
  • 14. 如何通過單擊HTML按鈕來執行JavaScript函數?
  • 15. 如何通過數據鏈接按鈕onclick事件
  • 16. 如何從通過.load加載的按鈕調用JQuery函數
  • 17. 如何在python上運行onclick函數
  • 18. 如何使按鈕按下時jQuery函數按順序運行?
  • 19. 通過jquery onclick事件運行PHP函數
  • 20. 我想要通過的onclick按鈕
  • 21. 通過按鈕onclick傳遞多個值
  • 22. 如何將函數從onblur更改爲使用提交按鈕進行onclick?
  • 23. onclick函數自動運行
  • 24. 停止遞歸函數調用onclick button1從不同的函數onclick按鈕2
  • 25. 運行從MenuStrip中C#中的按鈕方法/函數
  • 26. 如何通過onload函數自動進行onclick
  • 27. 如何在按鈕的onclick函數中使用雙引號?
  • 28. 如何在wordpress中啓用按鈕onClick函數和java腳本
  • 29. 如何在命令行中通過腳本運行函數?
  • 30. 如何從另一個按鈕的javascript在asp.net中運行onclick事件?