2011-03-09 130 views
4

我正在使用Chrome擴展程序,我必須通過jQuery點擊javascript中的<input type='file' />,才能顯示「另存爲」對話框。是的,我被告知 - 大多數瀏覽器不允許你這樣做。不過,我發現了一些很奇怪 - 我的文件輸入元素上單擊(並有保存對話框彈出),如果我通過地址欄做,像這樣:處理非常奇怪的gChrome/Javascript問題

javascript: $("<input type='file' />").appendTo("body").click(); 

所以,我想如果我可以在那裏做,那麼當然我可以從我的內容腳本中做到這一點...

很明顯,我錯了。從我的內容腳本中運行$("<input type='file' />").appendTo("body").click();,除了追加元素之外,不僅要執行zilch,還要模擬地址欄,並且還要執行zilch

我最初的想法是,這可能是某種內容腳本中的鉻限制,但我錯了 - 通過內容腳本工作的擴展jsShell能夠運行命令並獲得我想要的結果,而無需拴住。

那麼,有沒有人知道爲什麼jsShell &瀏覽器可以點擊文件輸入並獲得一個保存對話框,但我的擴展名不能?我嘗試了將jsShell分開,並嘗試實現它的工作方式(儘管我沒有看到它的工作方式有什麼特別之處),但它仍然無法正常工作。而控制檯沒有透露任何東西 - 沒有錯誤,沒有警告。

這使我的頭部過熱,所以任何幫助都非常感謝!

+1

Similar questions:http://stackoverflow.com/questions/1829774/jquery-simulating-a-click-on-a-input-type-file-doesnt-work-in-firefox和http:// stackoverflow。 com/questions/2769001/input-type-file-auto-click – 2011-03-09 18:27:55

回答

1

不知道問題的根源是什麼,但我設法縮小了一下,也許這會對您有所幫助。

似乎是點擊事件觸發只有在任何其他事件內被觸發。例如這個工程:

$("body").mouseover(test); 

function test() { 
    $("<input type='file' />").appendTo("body").click(); 
} 

這工作太:

$("body").append($("<a/>").text("test").click(test)); 

但這並不:

$("body").append($("<a/>").text("test").click(function(){ 
    setTimeout(test,1000); 
})); 

Jsshell評估你的腳本上的一個按鈕點擊所以它的工作原理,如果你嘗試評估這個腳本沒有按鈕點擊它將無法正常工作。

我猜測這是一個安全功能,只有當用戶執行某些操作時才允許觸發事件,而不是來自某個後臺進程。

+0

等等...廢話,所以這意味着我仍然不能做我想做的事......這是單擊文件輸入而無需用戶交互,右鍵? – mattsven 2011-03-09 18:13:48

+0

@ motionman95我編輯了一下我的代碼,'body.click'不是一個好例子。那麼,我不知道你在做什麼。如果用戶沒有點擊某個按鈕或者移動鼠標來顯示這個對話框,那麼它可能不起作用(如果它是我認爲的那樣) – serg 2011-03-09 18:23:02

+0

我可能是錯的,但是你爲什麼要逃避'\' ''在'''內?' – pimvdb 2011-03-09 19:01:20