檢測iframe獲取或失去焦點(即是否會收到鍵盤事件)的正確方法是什麼?以下是不FX4工作:檢測iframe何時獲得或失去焦點
var iframe = /* my iframe */;
iframe.addEventListener("focus", function() { /* never gets called */ }, false);
檢測iframe獲取或失去焦點(即是否會收到鍵盤事件)的正確方法是什麼?以下是不FX4工作:檢測iframe何時獲得或失去焦點
var iframe = /* my iframe */;
iframe.addEventListener("focus", function() { /* never gets called */ }, false);
原來它不是真的有可能。我不得不改變我的頁面的邏輯,以避免跟蹤iframe是否有焦點。
這是可能的。看到我的答案。 – Ryan 2012-10-19 17:10:54
如果您實現HTML5 sendMessage以在兩者之間進行通話,則給出的答案可能與交叉來源 – user3036342 2014-09-15 09:57:30
的解決方案是這樣的父頁面上注入一個JavaScript事件:
var script = document.createElement('script');
script.type = 'text/javascript';
script.innerHTML =
"document.addEventListener('click', function()" +
"{ if(document.getElementById('iframe')) {" +
// What you want
"}});";
head.appendChild(script);
您可以輪詢「document.activeElement」以確定它是否與iframe匹配。輪詢是不理想的,但它的工作原理:
function checkFocus() {
if(document.activeElement == document.getElementsByTagName("iframe")[0]) {
console.log('iframe has focus');
} else {
console.log('iframe not focused');
}
}
window.setInterval(checkFocus, 1000);
不適用於我。我在帶有嵌入式YouTube視頻的網頁上使用鉻。點擊視頻不會改變document.activeElement,它始終指向主窗口的
– 2013-07-16 15:02:49它在一個普通的iframe中工作;不確定嵌入的YouTube視頻的作用。當你點擊它時,它可能會使用javascript將焦點設置在其他地方。它甚至可能使用Flash。 – Ryan 2013-07-16 18:26:15
我以後用鉻測試過。事實上,我在Chrome x Chromium中獲得了不同的行爲。在Chrome中,它就像你說的那樣工作。在鉻中,它的工作方式如上所述。 – 2013-07-16 22:22:08
我知道這是舊的,但我也有同樣的問題。
我最終使用的代碼這個小PICE:
$(document).on('focusout', function(){
setTimeout(function(){
// using the 'setTimout' to let the event pass the run loop
if (document.activeElement instanceof HTMLIFrameElement) {
// Do your logic here..
}
},0);
});
不適用於[youtube iframe](https://developers.google.com/youtube/iframe_api_reference#Mobile_considerations)。當我打電話給player.nextVideo()時,iframe在不調用此方法的情況下偷走焦點 – woojoo666 2015-04-06 17:41:12
謝謝,這對我很有用。超時thingy是必不可少的,因爲我試圖隱藏下拉元素,當用戶點擊任何地方使用簡單的窗口點擊事件時,實際上不會觸發時,您將焦點更改爲iframe(如tinymce使用)。這種聚焦和超時確保我可以關閉彈出窗口,並確保在彈出窗口中單擊的內容也被觸發。 – Johncl 2016-10-10 09:06:35
偉大的解決方案。謝謝! – GivP 2017-02-10 18:39:37
下面是代碼當一個iframe獲取或失去焦點
// This code can be used to verify Iframe gets focus/loses.
function CheckFocus(){
if (document.activeElement.id == $(':focus').context.activeElement.id) {
// here do something
}
else{
//do something
}
}
檢測這可能會實現
document.addEventListener('click', function(event) {
var frame= document.getElementById("yourFrameID");
var isClickInsideFrame = frame.contains(event.target);
if (!isClickInsideFrame) {
//exec code
}
});
不幸的是,它不適用於不同的域(CORS)。例如: https://jsfiddle.net/liadmagen/bxhwv9v1/1/ – 2017-12-22 17:17:03
請查看http://stackoverflow.com/questions/1926861/iframe -onblur-event – 2011-03-28 08:22:32
@Uw我無法控制iframe的內容(不同來源),並且該方法需要訪問iframe.contentDocument(不允許來自不同來源的文檔) – CAFxX 2011-03-28 08:36:22