SendKeys是嚮應用程序發送擊鍵的方法。
我可以在Javascript中做到這一點,在瀏覽器中發送按鍵?我可以在Javascript中使用SendKeys嗎?
REF:
http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx
SendKeys是嚮應用程序發送擊鍵的方法。
我可以在Javascript中做到這一點,在瀏覽器中發送按鍵?我可以在Javascript中使用SendKeys嗎?
REF:
http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx
如果您能夠在操作系統級別上發送擊鍵,這將是一個很大的安全問題。 如果您能夠將鍵擊發送到所需的安裝對話框,您可以(例如)在客戶端計算機上安裝任何類型的軟件。
是的,你可以想出一個active-x控件或一些其他工具來安裝在客戶端機器上。但是由於這種工具存在安全問題,即使在受控環境下,我也不會這樣做。
大多數情況下,有一種方法可以在不違反安全的情況下實現您所需的功能。
更新:如果要跳轉到下一個tabfield,則必須使用focus()方法將焦點設置爲下一個元素。不幸的是,你必須在javascript中自己找到下一個元素,但這不應該是一個大問題 - 你可以在JavaScript中保留所有元素的有序列表。
BTW:http://forums.devarticles.com/javascript-development-22/moving-to-next-tabindex-on-event-2382.html
有很多網頁內JS框架實施的事件的模擬。
Is it possible to simulate key press events programmatically? jQuery的
Javascript: simulate a click on a link爲YUI
然而,更簡單的方法是將鏈接的第三個職位由拉爾夫給予其重點就到的tabIndex屬性「下一個」文本框表單元素中的元素。
如果您構成了一個文本框的ID列表和您想要的順序,那麼可能會有更爲精彩的方式。
當然,tabIndex列表可能不是由您自己生成的,而是通過在文本字段中漫步。
創建一個循環來生成列表加載文檔時(DOMContentLoaded):
var tabIndexList = new Array();
function tabIndexListGeneration(){
var form = document.getElementById("Your form ID"), // remember to fill in your form ID
textfields = form.getElementsByTagName("input"),
textfieldsLength = textfields.length;
for(var i=0;i<textfieldsLength;i++){
if(textfields[i].getAttribute("type") !== "text" || textfields[i].getAttribute("tabIndex") <= 0)continue;
/* tabIndex = 0 is neglected as it places the latest, if you want it, change 0 to -1
* and change tabIndexPointer = 0 into tabIndexPointer = -1 below */
tabIndexList[textfields[i].getAttribute("tabIndex")] = textfields[i];
}
}
// You can use the function of JS Framework if you don't like the method below.
if(document.addEventListener){
document.addEventListener("DOMContentLoaded", tabIndexListGeneration, false);
}else{
window.attachEvent("onload", tabIndexListGeneration);
}
和事件內部 「文本輸入等於文本框最大長度」:
var tabIndexPointer = target.getAttribute("tabIndex"); // target is the DOM object of current textfield
while(!(++tabIndexPointer in tabIndexList)){
if(tabIndexPointer >= tabIndexList.length)
tabIndexPointer = 0; // or other action after all textfields were focused
}
tabIndexList[tabIndexPointer].focus(); // if other action needed, put it right after while ended
注:形式textfields的結構不能突變,否則會出現錯誤。
如果textfield動態生成,則運行tabIndexListGeneration()
來重新生成列表。
這適用於我。 ActiveXObject需要在IE中打開。
var PaintProg = new ActiveXObject("WScript.Shell"); //paste to mspaint
PaintProg.Run("mspaint.exe \\\\srv4\\photos\\image1.jpg",9,false);
var PaintTimer = window.setInterval(PaintPaste,1000);
function PaintPaste()
{
if (PaintProg.AppActivate("Paint",true) == true)
{
PaintProg.SendKeys('"^(v)""%(F)""x""~"',true);
window.clearInterval(PaintTimer);
}
}
這將是一個巨大的安全漏洞,我不建議走下ActiveX路徑 - 它會提示用戶並且只能在IE中工作。另一種選擇是如果您創建一個託管WebBrowser控件的應用程序。似乎有點可疑,它是爲了什麼? – 2011-05-13 07:04:08
用於tabIndex用途。如果我可以這樣做,我不需要在事件處理中實現下一個tabIndex元素邏輯。 – diewland 2011-05-13 07:57:44
你的意思是表單元素的tabindex屬性? http://www.htmlcodetutorial.com/forms/_INPUT_TABINDEX.html爲什麼你需要發送擊鍵? – rdmueller 2011-05-13 09:03:55