2012-05-10 57 views
2

首先我是失望這個插件本身只有英文。例如,如果用戶單擊Apply with LinkedIn按鈕並登錄到法語檔案中,它將正確顯示。僅返回到插件顯示「已應用」英文頁面。應用領英插件 - 支持語言

爲了解決這個問題,我編寫了一些javascript來替換「Apply with LinkedIn」和「Share」文本以及按鈕加載後的法文等價物。我現在遇到的問題是按鈕的「已應用」版本。它似乎是異步加載到實際的插件,這意味着它在一些情況下覆蓋了我的法文文本,但其他情況下則不會。

我知道我可以在提交應用程序時利用onsuccess事件。但是,當LinkedIn用戶重新訪問該頁面時,「已應用」文本並不總是以正確的語言顯示。

問題1:有沒有人有運氣與任何技術來達到預期的效果?

問題2:哦,什麼時候LinkedIn會最終正確地支持這個?

任何幫助或方向是非常感謝。

謝謝!

UPDATE:

我可以證實,伊戈爾樓的解決方案,以使用setInterval功能,並檢查是否有變化每100ms是最好的選擇,並在所有測試的瀏覽器完美地工作。

感謝您的所有幫助和建議!

回答

2

該插件似乎從服務器異步接收其信息並對其採取行動,即更改頁面內容。你有沒有試過聽DOM變異事件?

這裏是他們當用戶使網頁中的變化是如何工作的一個例子:

<html> 
    <!-- This is just mock-up to allow user to modify the DOM --> 
    <body> 
    Text to add: <input id="in1" type="text"/> 
    <button onclick="addNode();">Add node</button> 
    <p id="toAdd"></p> 
    </body> 

    <script type="text/javascript"> 
    function addNode() { // adds a text node to the <p> element 
     document 
     .getElementById("toAdd") 
     .appendChild(document 
      .createTextNode(document 
      .getElementById("in1") 
      .value 
     ) 
     ); 
    } 

    /////////////////////////////////////// 
    // Here comes the interesting part: !!! 
    document 
     .getElementById("toAdd") // listen to modifications of the <p> element 
     .addEventListener(
     "DOMSubtreeModified", // in this case all modifications of its subtree 
     function() { 
      alert('Modified!'); // change this to whatever fits your purpose 
     } 
    ); 
    </script> 
</html> 

更多突變事件here。如果你想支持IE < 9,你需要一種不同的方法。也許定期檢查,例如每隔100毫秒,網頁是否包含英文按鈕並將其更改爲法文。見setInterval()。這應該是面向未來的(突變事件被棄用),但可能更加低效(緩慢)。

無論如何,這是一個黑客。只有LinkedIn可以提供乾淨的解決方案,例如允許插件的語言代碼參數。

+0

類似這樣的東西可以工作,但用戶可能會在切換之前的某個點看到英文版的按鈕。我想過使用這樣的東西,但等待更改的安全窗口要多長時間?我想知道如果setInterval無限期地運行會影響瀏覽器的性能。 – Robin

+0

如果您每隔100 ms檢查一次,我懷疑有人會注意到英文文本。此外,對瀏覽器性能的影響應該可以忽略不計。當用戶離開頁面時,你的腳本會停下來,所以你可以保持它「無限期地」運行。如果您想要安全地玩遊戲,您的腳本可以先執行瀏覽器檢測,然後使用IE <9的setInterval()解決方案和其他突變事件。 –

+0

閱讀了關於突變事件的缺點後,我可能會採用setInterval路線。 – Robin

0

從我所收集,這是你所看到的問題:

  1. 按鈕最初加載文本「已應用」。
  2. 您可以修改按鈕文本以將文本更改爲法語。
  3. LinkedIn修改按鈕文本以將其更改爲「已應用」。

...它是間歇性,因爲有時3發生前2

我想不出一個「好」的解決了這個問題,但我想聽到的話,伊戈爾的答覆工作。我可以想到一個很好的破解:

異步調用必須以某種方式定位按鈕,可能通過它的類名*。因此,在將文本更改爲法語後,請將更改爲其他名稱。這樣異步調用將失敗,並且您的文本將永遠不會被覆蓋。

結果是,LinkedIn將失去對此按鈕的所有訪問權限,但由於這是一個已經應用的按鈕,所以我認爲這不重要。你也冒着失去使用類名選擇CSS屬性的風險,但在狂放地看着LinkedIn按鈕,我認爲這些樣式都是內聯的(如果必須的話,你可以自己在一個新類名下自己複製它們。)

祝你好運!


* LinkedIn還可能存儲JavaScript引用,而不是通過類名進行定位。這將更難追查,但同樣的規則適用:找到LinkedIn用來識別該按鈕並將其銷燬的任何部分。

+0

這是我懷疑的JavaScript參考。 LinkedIn JavaScript由於壓縮而難以瀏覽。 – Robin

+1

@Dan:就我所見,來自LinkedIn的HTML包含最初沒有按鈕。 JavaScript動態地添加它。因此,如果您銷燬包含按鈕的部分,LinkedIn的腳本很可能會重新創建該腳本。只是猜測... –