我们在多个网站上使用Google网站翻译下拉菜单。几天前,我们注意到初始化下拉列表显示IE 7和IE 8上的JavaScript错误。
错误的确切来源是返回为http://translate.google.com/translate_a/element.js的代码的第二行,其中显示a.hasOwnProperty(b [c])?
确切的错误是"对象不支持属性或方法&has;#Ow;'"。
奇怪的是,在我们的某个网站上,转换程序下拉列表根本没有显示,在另一个网站上,每个页面加载时都会显示一个JavaScript错误。
任何建议如何:
再次为IE 7和8工作吗?
至少避免显示JavaScript错误?
是否有关于Google网站翻译或专用帮助论坛的详细文档?我找不到比这更详细的内容:https://support.google.com/translate/#topic=2534534
由于
答案 0 :(得分:3)
刚遇到同样的问题..好像他们正在使用hasOwnProperty
对象不支持的window
。 (See this article)。
hasOwnProperty的问题在于它确实存在 IE8,但在窗口对象上不可用。如果你已经离开了 使用类似命令编写的代码 'window.hasOwnProperty(“somevar”)',你可能会在视线中崩溃 这一切都在IE8中失败了。对此有一个很好的解决方法:
使用以下代码来解决问题。
window.hasOwnProperty = window.hasOwnProperty || Object.prototype.hasOwnProperty;
希望它也可以解决IE7上的问题。
答案 1 :(得分:0)
抱歉交叉发布。我得到了Google支持here的一些回复,但没有解决方案。
该问题影响IE 7和IE 8,包括在兼容模式下运行更高版本的IE版本或在另一个程序中使用.NET Web Browser控件(两者都默认为IE 7)。
我们现在为IE 7和8禁用了翻译实用程序,并使用<meta http-equiv="X-UA-Compatible" content="IE=edge" />
强制IE在兼容模式和Web浏览器控件中使用最新的文档模式(注意,这不会更改用户代理字符串这些情况仍然是MSIE 7,但是使用最新的可用模式运行脚本,完整的详细信息here)
这样做我们在使用IE 10和IE 11的嵌入式浏览器控件中仍然出现“无效参数”错误,但我们通过在初始化周围包装try-catch块来抑制向用户显示。
我们的解决方法的完整实现如下所示:
<div id="google_translate_element"></div>
<script type="text/javascript">
function googleTranslateElementInit() {
try {
new google.translate.TranslateElement({ pageLanguage: 'en', layout: google.translate.TranslateElement.InlineLayout.HORIZONTAL, gaTrack: true, gaId: 'UA-xxxxxxxxx-x' }, 'google_translate_element');
}
catch(ex) {
//this supresses JS errors in Google code being shown to users, the translate utility will simply not be shown
}
}
try {
//dynamically write link to translate JS file, only if useragent is not IE 7 or IE 8 or the document mode is bigger than IE 8
if ((navigator.appVersion.indexOf("MSIE 7.") == -1 && navigator.appVersion.indexOf("MSIE 8.") == -1) || document.documentMode > 8) {
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = '//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit';
document.body.appendChild(newScript);
}
} catch (ex) {
//ignore
}
</script>
有了这个,我们不会打扰用户有错误。嵌入式浏览器的翻译仍然失败,但如果谷歌进行进一步的更改,它有可能再次活跃起来......