2011-06-30 147 views
1

對於模糊的標題很抱歉,我會盡量詳細描述。需要關於Chrome擴展開發的重要建議

如果你看看我之前在這個網站上的問題,你會發現我要求提供關於如何填充Chrome上下文菜單的提示。我使用上下文菜單的原因是我想要一個易於訪問的界面,向用戶顯示值列表。這些值代表不同類型的文件(例如出生證明或稅務報告)。這些文件中的每一個都有獨特的屬性(例如出生證明是「出生證明」和「身份證明」)和規則。當我必須將文件上傳到基本上是ASP.Net網站的DMS(文檔管理系統)時,會使用這些屬性和規則。文本字段和下拉列表用於接收前面提到的規則和屬性。通常,在添加文件時,我必須根據文檔類型手動填寫這些字段,這是一個非常耗時的過程。現在

,我做的是簡單地能夠點擊我的上下文菜單中的項目之一(同樣,假設我點擊「出生證」)和頁面上的字段將自動更新與相應的值。

到目前爲止,我所做的是將大部分菜單項/文檔類型及其相應的屬性/規則放在JSON格式中。我的初衷是使用上下文菜單擴展中包含的腳本來設置頁面字段的值。只有,如果我沒有弄錯(如果我是,請告訴我),您無法直接通過Chrome擴展程序修改網頁上HTML元素的值。

據我所知,userscript將能夠完成這項任務,但我仍然希望有一個控制界面(上下文菜單)來選擇文檔類型(我不想要一個始終執行的腳本相同的參數)。

因此,從我所描述的,你會說什麼是實現這一任務的最佳方式?我可以「調用」userscript或至少傳遞一些參數,以便我可以根據需要修改文本字段/下拉列表的值嗎?任何建議都是非常棒的。

P.S.我測試了一些腳本,看看這些字段實際上是否可以通過編程方式改變它們的值。我只是複製粘貼代碼(與字段中的一些預定義的值)與「javascript:」前綴的地址欄,它的作品就像一個魅力!現在,我只需要

  • 1)能夠做到這一點,而不使用這個地址欄招和
  • 2)有一個實際的接口選擇值,而不是隻是硬編碼他們。只有
+1

僅閱讀其他評論如果您可以考慮另一個選項而不是谷歌瀏覽器插件.........而不是限制用戶完成此任務的瀏覽器,您可以使用ASP.net(和javascript)並添加一些「自動填充」選項。用戶將點擊自動填充按鈕,該字段的值將從數據庫中提取並自動填充。這可以從任何瀏覽器完成,並將節省您的時間代碼插件爲其他人.. –

回答

1

,如果我沒有記錯的話(如果我,請告訴我),你不能直接通過瀏覽器擴展程序修改網頁上的HTML元素的值。

當然可以。查看content scripts,可以將其設置爲自動注入match a specified pattern的站點。您也可以通過chrome.tabs.executeScript進行程序化注入。 Chrome擴展程序可以訪問比用戶腳本更多的工具。

你只使用任何onclick回調你當creating your context menu設置,那麼你會運行:

chrome.tabs.executeScript(null, { file: "script_to_inject.js"}); 

一旦該腳本加載,你有幾種選擇,但我只想用message passing獲得來自您的背景頁面的相應信息,然後修改字段。

簡單的例子

的manifest.json(添加到您的權限)

"permissions": [ "http://*/*" ], 

script_to_inject.js

chrome.extension.sendRequest("options", function(response) { 
    alert(response.birthday); // Alerts the birthday in the response 
    alert(response.name);  // Alerts the name in the response 
    document.getElementById("some_field_id").value = response.name; 
}); 

background.html(或background.js)

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
    switch (request) { 
    case "options": 
     sendResponse({birthday: "1/1/1970", name: "Unix"}); 
     break; 
    default: // Add other cases as you see fit 
     sendResponse({}); 
     break; 
    } 
}); 
+0

好吧,只是讓我明白:onclick回調將包含chrome.tabs.executeScript(空,{file:「script_to_inject.js」} ),其中「script_to_inject.js」只包含改變字段的腳本(沒有指令立即運行)。我在消息傳遞部分仍然很模糊,但是我只需要調用我用正確的參數添加的腳本,然後就可以完成剩下的工作。我是否正確? –

+0

@菲爾右,你注入的腳本只是一個文件;你不能添加參數。一旦該文件加載完成,您就可以將請求發送到後臺腳本以獲取信息,後臺腳本將作出響應。這是一個強大的工具,所以它可能會讓人感覺過度殺傷,但如果你想稍後改變它,這是最好的辦法。有關更多詳細信息,這裏有[問題的重點](http://stackoverflow.com/search?q=message+passing+%5Bgoogle-chrome-extension%5D)。 – brymck

+0

@Phil其實,你可以看到上面的例子。 – brymck