过去几天我一直在做这个,感觉我很接近,但我错过了一些东西。我想要完成的是当用户从谷歌翻译小部件中选择一种语言时显示一个模式弹出窗口。
由于用户可以选择的语言在 dom 加载后由 javascript 小部件添加的 iframe 内,因此我使用 setInterval 检查 iframe 何时可用(出于某种原因,jquery 的 .load() 函数对我永远不起作用)。我还有另一个 setInterval 方法来检查语言类何时加载(当 iframe 可用时它们不会立即可用)。
当我将点击事件绑定到语言元素时,一切都按预期工作......一次......对于单击的任何元素。如果我删除clearInterval(waitForLanguageLinks)
,那么每次都按预期工作,但这会导致内存泄漏并且页面最终崩溃(正如人们所期望的那样)。
所以我的问题是......如何在setInterval()
回调中将点击事件绑定到这些元素中的每一个,并在调用后保持该事件的绑定clearInterval()
(希望这是有道理的)。
$(document).ready(function(){
var iframe;
var languageElements;
var translateIframeCheck = setInterval(function(){
iframe = $('.goog-te-menu-frame').contents();
if(iframe.length > 0){
clearInterval(translateIframeCheck);
}
}, 100);
var waitForLanguageLinks = setInterval(function(){
languageElements = iframe.find('.goog-te-menu2-item');
if(typeof iframe !== "undefined" && languageElements.length > 0){
languageElements.click(function(){
console.log($(this).find('.text').html());
});
clearInterval(waitForLanguageLinks);
}
}, 100);
});
谷歌脚本加载的 iframe 进行翻译:
<iframe class="goog-te-menu-frame skiptranslate" title="Language Translate Widget" style="visibility: visible; box-sizing: content-box; width: 1004px; height: 285px; left: 413.5px; top: 167px;" frameborder="0"></iframe>