【问题标题】:google translate element does not translate iframe if src is changed to another local page如果将 src 更改为另一个本地页面,谷歌翻译元素不会翻译 iframe
【发布时间】:2017-05-22 18:05:53
【问题描述】:

Google 翻译元素仅在第一次加载时才会翻译我页面上的 iframe。如果我在 iframe 中加载另一个页面,则该页面不会在大多数浏览器(例如 Chrome)中翻译。我不能使用Google Translate iframe workaround,因为生成的网页无法在 iframe 中显示(谷歌似乎使用了 framekiller)。

这是我的代码:

<div id="google">
    <span id="google_translate_element"></span> <span style="float: left;">
        <script id="translate1">
            function googleTranslateElementInit() {
                googleTranslate = new google.translate.TranslateElement({
                    pageLanguage : 'de'
                }, 'google_translate_element');
            }
        </script> 
        <script id="translate2"
            src="http://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit">
        </script>
    </span>
</div>

【问题讨论】:

  • iframe 是来自您的域还是其他网站?
  • 来自同一个域(以本地路径作为源)。

标签: javascript google-translate


【解决方案1】:

由于谷歌翻译发送的响应中包含X-Frame-Options: DENY 标头,翻译后的页面无法在 iframe 中显示。

我的解决方案是在你的服务器上实现一个路由来获取翻译的页面,然后有一个 iframe

<iframe src="/translate?url=targetUrl"></iframe>

您可以绕过 X-Frame-Options: DENY 标头,方法是在您的服务器上实现一个路由来获取内容并将其转发给用户,如下所示(在 Python 中,使用 Flask):

def get_translate_url(url):
    return "http://translate.google.com/translate?hl=bg&ie=UTF-8&u=%s&sl=de&tl=en" % url

@app.route('/translate')
def grabContentForMyIframe():
    url = request.args.get(url)
    response = requests.get(get_translate_url(url))
    return response.content

【讨论】:

  • 如何在我的 Strato 服务器上实现此路由?我必须编辑哪个文件?
  • 操作系统为SunOS gaffer 5.10 Generic_142901-13 i86pc i386 i86pc Solaris。
  • 我不认为你可以,因为 Strato 看起来只适用于 Wordpress / 静态文件——你没有服务器端代码。所以我的答案不是答案。道歉。
  • 我可以用我的服务器加载php!唯一的问题是flask没有安装....
  • googletranslate 的行为非常不稳定。有时它会翻译 iframe,有时却不会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多