Проблема с API Google Транслитерация с angular 9 при загрузке веб-сайта в первый раз - PullRequest
0 голосов
/ 08 мая 2020

У меня в индексе есть тег скрипта ниже. html:

<script type="text/javascript" src="https://www.google.com/jsapi"></script>

У меня также есть отдельная служба транслитерации, в которой я вызываю метод initializeTransliteration () из соответствующий метод AfterViewInit () компонента.

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

Однако, когда я обновляю sh браузер несколько раз, эта проблема решается, и я могу транслитерировать текст, который я набираю в текстовой области. .

Это началось после того, как я обновился до angular 9.

URL-адрес веб-сайта: https://www.yaavarumkelir.com - в строке поиска на верхней панели навигации включена транслитерация.

Кто-нибудь может мне помочь в решении этой проблемы?

Изменить: после дальнейшего исследования я обнаружил, что вызов jsapi иногда получает 302 при загрузке fre sh, и именно поэтому это происходит. Почему вызов google jsapi дает 302? Это из-за того, что мой код делает что-то неправильно? Может кто-нибудь посоветовать, как cI снова вызвать jsapi, если 302 возвращается в первый раз?

1 Ответ

1 голос
/ 09 мая 2020

Хорошо. После дня пробных попыток использования различных подходов, приведенный ниже подход, похоже, сейчас работает.

Я скопировал содержимое https://www.google.com/jsapi и создал новый файл jsapi. js. Я поместил этот файл в каталог publi c своего сервера.

Я также заменил тег скрипта в своем index. html файле на:

<script defer type="text/javascript" src="jsapi.js"></script>

Обоснование: я думал, что ответ от репозитория Google может быть медленным, и локальное обслуживание файла может решить проблему, и похоже, что он работает. Я обновлю ответ, если увижу какие-либо проблемы с этим подходом.

...