IE 7和8 Google网站翻译失败,错误:element.js中的hasOwnProperty

时间:2015-05-18 13:33:01

标签: internet-explorer google-translate

我们在多个网站上使用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

由于

2 个答案:

答案 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>

有了这个,我们不会打扰用户有错误。嵌入式浏览器的翻译仍然失败,但如果谷歌进行进一步的更改,它有可能再次活跃起来......