JavaScript speechSynthesis.speak () без активации пользователя больше не разрешен с M71

Вам нужно сделать еще несколько шагов на основе документации по обработке коллекции в Pro * C .

Сначала создайте файл с именем int55_in.typ, содержащий имя вашего типа коллекции:

case=lower
type int55

Затем запустите инструмент переводчика типа объекта :

$ORACLE_HOME/bin/ott intype=int55_in.typ outtype=int55_out.typ hfile=int55.h user=usr/pwd code=c

, который будет генерировать два файла. В файле .pc добавьте:

#include "int55.h"

, и ваш код должен использовать этот тип объявленной коллекции:

  EXEC SQL BEGIN DECLARE SECTION;
    int a;
    int55 *b;   /* collection type */
    int c;      /* single instance from collection */
    OCIInd i;   /* indicator */
  EXEC SQL END DECLARE SECTION;

  EXEC SQL ALLOCATE :b;

  EXEC SQL DECLARE cdtest_cursor CURSOR FOR select a, b from rtable;
  EXEC SQL open cdtest_cursor;
  EXEC SQL FETCH cdtest_cursor INTO :a, :b:i;

Затем вы можете использовать COLLECTION GET, чтобы получить отдельную элементы; так как это varray, вы можете перебирать четыре записи, например. как простое демо:

  int j;
  for (j = 0; j < 4; j++)
  {
    EXEC SQL COLLECTION GET :b INTO :c;
    printf("%d %d %d\n", j, a, c);
  }

  EXEC SQL close cdtest_cursor;

Когда вы компилируете, вам нужно точно определить местоположение для oci.h (включенное из сгенерированного int55.h), если оно еще не указано; и вам нужно указать сгенерированный файл типа:

$ORACLE_HOME/bin/proc include=$ORACLE_HOME/rdbms/public intyp=int55_out.typ ...

С одной строкой в ​​вашей таблице:

insert into rtable values (1, int55(2, 3, 4, 5));

работает, а затем получает:

0 1 2
1 1 3
2 1 4
3 1 5

Очевидно, вы должны выбрать свои собственные имена файлов, я просто использовал ваше имя типа в качестве примера, чтобы, надеюсь, сделать его более ясным. И если вам нужно обрабатывать типы mutlipel, они могут перейти в один файл _in.typ, чтобы создать один файл _out.typ and .h`.

3
задан stepozer 19 January 2019 в 08:44
поделиться

1 ответ

Это часть новой политики Chrome относительно создания звука с веб-страниц.
Вам просто нужно, чтобы ваш пользователь предоставил пользовательский жест (для которого вы можете найти список здесь ) в течение времени жизни родительского документа (то есть событие может долго быть мертвым, пока пользователь когда-либо взаимодействовал) со страницей).

Обратите внимание, что эти события могут даже проходить через фреймы, например, в StackOverflow простой факт, что вам нужно нажать кнопку «Выполнить», сделает внутренний фрейм разрешенным для выполнения этого кода: [116 ]

const ut = new SpeechSynthesisUtterance('No warning should arise');
speechSynthesis.speak(ut);

И в своем коде вы просто должны предоставить своего рода пользовательский интерфейс, который обеспечит взаимодействие ваших пользователей со страницей. прежде чем вызывать этот метод (например, кнопка / переключатель будет отлично).

0
ответ дан Kaiido 19 January 2019 в 08:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: