2009-02-27 101 views
8

我在調用頁面時請求焦點以下JavaScript。Safari和Chrome瀏覽器的對象焦點問題

此代碼與Firefox和IE7完全兼容,但Chrome和Safari似乎並沒有將焦點放在所有位置。如何使它適用於所有瀏覽器?

document.getElementById("MyFlashFile").focus(); 
+0

這仍然無法在Chrome for Windows的當前構建工作(版本28.0.1500.72米)沒有提供解決方法的工作,要麼。 – Josh 2013-07-26 21:44:04

回答

0

確保整個頁面已經被渲染後,該代碼被調用。它可能被稱爲HTML所引用的HTML之上,所以該元素將不存在。

各種JavaScript框架有實用程序告訴你何時DOM is ready

4

不幸的是,沒有辦法確保您可以將焦點設置爲適用於所有瀏覽器的Flash文件。 IE和Firefox已經解決了這個問題(大部分情況),但Chrome和Safari都是基於Webkit的,它沒有解決方案。

如果您曾在YouTube或其他視頻/ Flash網站上發現您首先看到的東西是誘使您點擊播放器,那是由於此問題。

一位開發人員想出了一個聰明的解決方法,但它的確涉及到將一些ActionScript添加到您的Flash文件,如果您正在構建一個通用播放器,這可能是一個痛苦的屁股。

加里·畢曉普:Fixing Firefox Flash Foolishness

的解決方案另一類是您的wmode設置爲不透明。我在某些情況下聽說過這個方法,但是會在文本區域搞砸遊標。我也沒有太多的運氣,但你可以嘗試一下。

您可以在bugzilla找到更多有關無焦點錯誤的信息。

+0

亞當,請查看下面的CláudioSilva的解決方案。它爲我工作:)。 – Anvaka 2010-09-15 16:05:43

16

它花了我幾個小時搜索互聯網,但最終我找到了一個適用於最新版本的IE,Firefox,Chrome和Safari的解決方案。 下面的代碼解決了這個問題爲好:

<head> 
    <script type="text/javascript" src="swfobject.js"></script> 
    <script> 
    function setFocusOnFlash() { 
     var f=swfobject.getObjectById('myFlashObjectId'); 
     if (f) { f.tabIndex = 0; f.focus(); } 
    } 
    </script> 
</head> 
<body onload="setFocusOnFlash()"> 

這個例子假設閃光燈使用SWFObject的庫嵌入。如果不是,則應該將f變量設置爲保存Flash影片的Object或Embed標記。

上編輯5 2012年5月:嗯,可惜似乎tabIndex解決方法不再適用於瀏覽器(Chrome/Safari瀏覽器)和操作系統的所有組合。例如,目前Windows上的Chrome 18失敗。

查看下面的鏈接,由提供基督教垃圾,以獲得問題的解決狀態。

+0

這不適合我。什麼是爲getObjectById()指定的ID?通過attributes.id或swfobject.embedSWF()調用的第二個參數提供給swfObject的ID? – BadmintonCat 2011-03-26 04:18:26

1

除了克勞迪奧·席爾瓦的答案,你需要設置wmode="opaque"