2014-11-08 77 views
2

我遇到了一個問題,即如果在當前窗口的頁面上,焦點被JavaScript觸發,它會從我的插件輸入中竊取焦點。是否有辦法強制面板中的輸入保持專注。如何將焦點強制爲面板輸入。 Firefox插件sdk

$(inputSelector).focusout(function(){ 
     $(inputSelector).focus(); 
    }); 

    $(inputSelector).blur(function(){ 
     $(inputSelector).focus(); 
    }); 

我已經試過這似乎我的測試頁面上,但不是在我的面板:(工作

按照文檔上面的 - >https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/panel 將焦點設置爲false應該

設置爲false可防止在顯示面板時將焦點移開 只有在必要時才關閉此功能,以防止出現輔助功能問題 可選,默認爲true

我已經設置了我的面板。

var text_entry = require("sdk/panel").Panel({ 
     width: text_entry_width, 
     height: text_entry_h, 
     focus: false, // doesnt seem to work.... 

     contentURL: data.url("entry.html"), 

     contentScriptFile: [ 
      data.url("jquery-2.1.1.min.js"), 
      data.url("text.js") 
     ], 

     contentStyleFile: [ 
      data.url("styles.css") 
     ] 
    }); 

它不追加,它設置爲false作品:(。

任何幫助,指導或建議將是真棒:)乾杯。

_____________ UPDATE ____________________________________________

似乎有是我不好解釋:(所以,我必須上傳到YouTube的視頻,希望能解釋這個問題好一點有些混亂。

https://www.youtube.com/watch?v=5fhJzpa515Y&feature=youtu.be

下面再找一些代碼。

Panel Html

<html> 
     <head></head> 
     <body> 
      <div id="resultTableTop" class="resultTable"></div> 
      <input type="text" id="edit-box"></input> 
      <div id="resultTableBottom" class="resultTable"></div> 
     </body> 
    </html> 

熱鍵代碼

var showHotKey = Hotkey({ 
     combo: "accel-t", 
     onPress: function() { 
      text_entry.show(); 
     } 
    }); 

面板JS顯示listenter

self.port.on("show", function onShow() { 
     $('input').focus(); 
     console.log('hi'); 
    }); 

希望這是更清楚一點,現在的幫助迄今爲止:)謝謝:)。

+1

'面板'是非模態的設計。你不能,也不應該強迫用戶與之交互。 – paa 2014-11-08 11:49:20

+0

這似乎有點傻,即時通過鍵入我的文本框和一些Java腳本niks焦點中途。我一直覺得,你至少可以按照我的jQuery代碼做些簡單的事情。目標不是強制用戶,而是當用戶選擇與輸入交互時,我希望能夠將注意力集中在輸入上。 – Spaceman 2014-11-08 12:54:36

+0

你的意思是一個網頁腳本竊取你的面板焦點? – paa 2014-11-08 13:23:42

回答

0

該代碼側重面板的輸入欄打開時:

main.js文件:

//main.js file 
var text_entry = require("sdk/panel").Panel({ 
    focus: true, //THIS SHOULD BE TRUE 
    contentURL: data.url("panel.html"), 
    contentScriptFile: [ 
     data.url("js/libs/jquery-1.11.1.js"), 
     data.url("get-text.js") 
    ] 
}); 

text_entry.on("show", function() { 
    text_entry.port.emit("show"); 
}); 

得到-text.js將其注入到面板文件:

//data/get-text.js file 
self.port.on("show", function onShow() { 
    $('input').focus(); 
}); 
+0

我目前使用已經抱歉,我應該包括它。問題沒有得到關注時,面板啓動它保持它。基本上我在頁面加載期間打開面板,我開始打字。在頁面上準備好在窗口的JavaScript和其中的某個地方觸發焦點。當我的面板處於活動狀態時,我想阻止主要的firefox窗口關注焦點。 – Spaceman 2014-11-09 22:46:11

+0

也將焦點從真實變爲假似乎沒有做任何事情。 – Spaceman 2014-11-09 22:47:01

+0

我測試過這個,它不能保持焦點。我會錄製一段視頻,我認爲這是一個視頻。也許它的一個錯誤:( – Spaceman 2014-11-11 12:23:40

0

這裏是一種黑客,未經測試的解決方案:

var { viewFor } = require("sdk/view/core"); 
var { Panel } = require("sdk/panel"); 


var panel = Panel({ 
    .. 
    onShow: function() { 
    var view = viewFor(panel); 
    view.setAttribute("noautohide", "true"); 
    } 
}) 

For more information of the panel noautohide attribute click here

+0

感謝您的答案,我會嘗試實施它,當我今晚回到家裏。 – Spaceman 2014-11-12 22:48:17

+0

這隻能防止當重點丟失時窗口消失,如果不能防止焦點問題在第一位:( – Spaceman 2014-11-13 09:18:47

+0

'要求(「sdk/view/core」)。getActiveView(panel)'將獲得XUL元素 – 2015-02-21 01:57:55

相關問題