首次加载网站时 Google 音译 api 与 angular 9 问题
Issue with Google Transliteration api with angular 9 on loading the website for the first time
我的 index.html 中有以下脚本标签:
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
我还有一个单独的音译服务,我在其中从相应组件的 AfterViewInit() 方法调用 initializeTransliteration() 方法。
import { Injectable, OnInit } from "@angular/core";
import { Router } from "@angular/router";
declare var google:any;
@Injectable()
export class Transliterate {
constructor(private currentRouter:Router){}
private async(){
return new Promise(
resolve=>{
resolve( google.load("elements", "1", {packages:"transliteration", callback: ()=>{this.onLoad(this.currentRouter)} }) );
}
)
}
initializeTransliteration(){
this.async().then(
value =>{
console.log(value);
}
);
}
private onLoad(router: Router){
var options = {
sourceLanguage: 'en',
destinationLanguage: ['ta'],
shortcutKey: 'ctrl+g',
transliterationEnabled: true
};
var opt_options ={
adjustElementStyle : false,
adjustElementDirection: true
}
var nodesArray:Array<Object> = Array.prototype.slice.call(document.querySelectorAll("textarea#tamilTransliterate"));
var control = new google.elements.transliteration.TransliterationControl(options);
control.makeTransliteratable(['tamilTransliterate'], opt_options);
control.c.qc.t13n.c[3].c.d.keyup[0].ia.F.p = 'https://www.google.com';
}
}
当我在清除缓存后第一次加载应用程序时,我在控制台上收到以下错误消息,并且我无法在文本区域进行音译。
loading elements other than inputtools with the jsapi loader is unsupported
但是,当我刷新浏览器几次后,这个问题就解决了,我可以音译我在文本区域中键入的文本。
我更新到 angular 9.
后开始出现这种情况
网站 URL:https://www.yaavarumkelir.com - 顶部导航栏上的搜索栏已启用音译。
有人可以帮我解决这个问题吗?
编辑:经过进一步调查,我发现 jsapi 调用有时会在新负载时收到 302,这就是发生这种情况的原因。为什么 google jsapi 调用会返回 302?是因为我的代码做错了什么吗?如果第一次返回 302,有人可以建议 cI 如何再次调用 jsapi 吗?
好的。经过一天尝试不同的方法后,以下方法目前似乎有效。
我复制了 https://www.google.com/jsapi 的内容并创建了一个新文件 jsapi.js。我将此文件放在服务器的 public 目录中。
我还将 index.html 文件中的脚本标记替换为:
<script defer type="text/javascript" src="jsapi.js"></script>
理由:我认为 google 存储库的响应可能很慢,在本地提供文件可能会解决问题,而且它似乎正在运行。如果我发现这种方法有任何问题,我会更新答案。
我的 index.html 中有以下脚本标签:
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
我还有一个单独的音译服务,我在其中从相应组件的 AfterViewInit() 方法调用 initializeTransliteration() 方法。
import { Injectable, OnInit } from "@angular/core";
import { Router } from "@angular/router";
declare var google:any;
@Injectable()
export class Transliterate {
constructor(private currentRouter:Router){}
private async(){
return new Promise(
resolve=>{
resolve( google.load("elements", "1", {packages:"transliteration", callback: ()=>{this.onLoad(this.currentRouter)} }) );
}
)
}
initializeTransliteration(){
this.async().then(
value =>{
console.log(value);
}
);
}
private onLoad(router: Router){
var options = {
sourceLanguage: 'en',
destinationLanguage: ['ta'],
shortcutKey: 'ctrl+g',
transliterationEnabled: true
};
var opt_options ={
adjustElementStyle : false,
adjustElementDirection: true
}
var nodesArray:Array<Object> = Array.prototype.slice.call(document.querySelectorAll("textarea#tamilTransliterate"));
var control = new google.elements.transliteration.TransliterationControl(options);
control.makeTransliteratable(['tamilTransliterate'], opt_options);
control.c.qc.t13n.c[3].c.d.keyup[0].ia.F.p = 'https://www.google.com';
}
}
当我在清除缓存后第一次加载应用程序时,我在控制台上收到以下错误消息,并且我无法在文本区域进行音译。
loading elements other than inputtools with the jsapi loader is unsupported
但是,当我刷新浏览器几次后,这个问题就解决了,我可以音译我在文本区域中键入的文本。
我更新到 angular 9.
后开始出现这种情况网站 URL:https://www.yaavarumkelir.com - 顶部导航栏上的搜索栏已启用音译。
有人可以帮我解决这个问题吗?
编辑:经过进一步调查,我发现 jsapi 调用有时会在新负载时收到 302,这就是发生这种情况的原因。为什么 google jsapi 调用会返回 302?是因为我的代码做错了什么吗?如果第一次返回 302,有人可以建议 cI 如何再次调用 jsapi 吗?
好的。经过一天尝试不同的方法后,以下方法目前似乎有效。
我复制了 https://www.google.com/jsapi 的内容并创建了一个新文件 jsapi.js。我将此文件放在服务器的 public 目录中。
我还将 index.html 文件中的脚本标记替换为:
<script defer type="text/javascript" src="jsapi.js"></script>
理由:我认为 google 存储库的响应可能很慢,在本地提供文件可能会解决问题,而且它似乎正在运行。如果我发现这种方法有任何问题,我会更新答案。