webkitNotifications - SECURITY_ERR: DOM Exception 18 - скрипт, ОК - кнопка - PullRequest
4 голосов
/ 06 февраля 2011

Я следовал http://www.beakkon.com/tutorial/html5/desktop-notification учебник для html 5 уведомлений на рабочем столе. Демо на этой странице работает для меня. Если я копирую весь код, это работает так, но ... когда я вызываю метод из javascript, он не отображает ни уведомления, ни запроса на разрешение. Вместо этого он поднимает SECURITY_ERR: DOM Exception 18.

Кажется, ошибка возникает в строке, которая создает само уведомление.

Кто-нибудь клеил, почему кнопка работает, а непосредственный вызов функции - нет?


Мой текущий код:

function RequestPermission(callback)
{
  window.webkitNotifications.requestPermission(callback);
}

function notif() {
  if (window.webkitNotifications.checkPermission() > 0) {
    RequestPermission(notif);
  }

  notification = window.webkitNotifications.createHTMLNotification('http://localhost:3000/images/rails.png');
  notification.show();
}

Не вычисляется:

notif();

Вычисляет:

<button onclick="notif()">NOTIFY</button>

Google Chrome: 9.0.597.84 (Oficiální sestavení 72991)

WebKit: 534.13

Ответы [ 2 ]

8 голосов
/ 06 февраля 2011

SECURITY_ERR: DOM Exception 18 действительно, если пользователь не разрешил вашему запросу получать уведомления.

Причина, по которой это происходит, заключается просто в том, что requestPermission является асинхронным.Когда пользователь нажимает Разрешить , чтобы получить разрешение, он позволяет вам использовать функцию уведомлений HTML5.

В вашем случае вы не ждете, пока пользователь нажмет Разрешить кнопка, она автоматически пытается создать уведомление HTML5 без вечера ждать их подтверждения.Если вы переставите свои условные выражения, это должно сработать.

function RequestPermission(callback) {
  window.webkitNotifications.requestPermission(callback);
}

function notif() {
  if (window.webkitNotifications.checkPermission() > 0) {
    RequestPermission(notif);
  } else {
    notification = window.webkitNotifications.createHTMLNotification('http://localhost:3000/images/rails.png');
    notification.show();
  }
}

Как вы заметили выше, поместите создание уведомлений в условный оператор, когда при вызове обратного вызова будет гарантировано разрешение.

0 голосов
/ 06 февраля 2011

Я считаю, что createHtmlNotification принимает только один параметр, и это должен быть URL-адрес документа HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...