Làm cách nào để tập trung vào tab Chrome đã tạo thông báo trên màn hình?


82

Tôi muốn triển khai chức năng tương tự như Gmail ngày nay. Khi có email mới hoặc có cuộc trò chuyện mới, cửa sổ bật lên thông báo sẽ xuất hiện và nếu bạn nhấp vào đó, tab có Gmail sẽ được lấy tiêu điểm.

Tôi có mã này:

var n = window.webkitNotifications.createNotification('ico.gif', 'Title', 'Text');
n.onclick = function(x) { this.cancel(); };
n.show();

Khi tôi nhấp vào thông báo, nó làm cho nó biến mất. Bây giờ tôi cần thêm một số mã vào chức năng onclick để hiển thị và tiêu điểm trang đã tạo thông báo này. Tôi biết điều đó là hoàn toàn có thể vì GMail làm điều đó rất tốt. Nhưng tôi đã không thành công khi xem xét các nguồn Gmail (chúng được tối giản hóa và khó hiểu).

Có ai biết làm thế nào để làm điều này?


this.cancel đã không được chấp nhận và bị xóa trong kênh Canary hiện tại.
Brandito

Câu trả lời:


107

Bạn chỉ có thể đặt window.focus () trong Google Chrome. Nó sẽ tập trung vào cửa sổ đó khi được nhấp vào.

var n = window.webkitNotifications.createNotification('ico.gif', 'Title', 'Text');
n.onclick = function(x) { window.focus(); this.close(); };
n.show();

Tôi đã mở trình kiểm tra trong Gmail, thêm mã ở trên, chuyển sang một tab khác và chạy nó. Thông báo xuất hiện và sau khi nhấp vào, nó đưa tôi trở lại Gmail.


3
Chà! Thật đơn giản ?! :-) Câu trả lời tuyệt vời, cảm ơn bạn. Tôi đã tìm kiếm nó khá lâu nhưng không thể tìm thấy nó. Bây giờ nó hoạt động hoàn hảo, cảm ơn một lần nữa.
Frodik

1
Không vấn đề gì! Chúc bạn hack vui vẻ :-)
Mohamed Mansour

Doesnt làm việc bây giờ jsfiddle.net/l2aelba/RhHgR :(, tôi có thể hack như cảnh báo do () để tập trung cửa sổ này lại
l2aelba

2
có ai biết làm thế nào mà bây giờ làm việc? Mã không tập trung vào TAB nữa .. thta có nghĩa là trong Chrome mới nhất, việc nhấp vào thông báo không tập trung vào tab mà nó đến. Nó vẫn còn wokrk trong gmail?
hko

6
Tính năng này hiện không được dùng nữa , hãy xem câu trả lời của Oswaldo bên dưới để biết giải pháp trình duyệt chéo.
nickf

48

Sử dụng Thông báo .

if (typeof Notification !== 'undefined') {
  alert('Please us a modern version of Chrome, Firefox, Opera or Safari.');
  return;
}

Notification.requestPermission(function (permission) {
  if (permission !== 'granted') return;

  var notification = new Notification('Here is the title', {
    icon: 'http://path.to/my/icon.png',
    body: 'Some body text',
  });

  notification.onclick = function () {
    window.focus();
  };
});

window.focus();không lừa! Nó phải được đánh dấu là câu trả lời đúng.
Maxime Lafarie

3
window.focus()không hoạt động trên Chrome 60, giải pháp jazzcat với parent.focus()công trình
pikax

Điều này hoạt động nhưng ngay sau khi tôi sử dụng tùy chọn "Tạo lối tắt" và biến nó thành một ứng dụng độc lập, chuyển hướng không hoạt động và mở một tab mới.
Waza_Be ngày

26

window.focus()không phải lúc nào cũng hoạt động trong các phiên bản trình duyệt Webkit gần đây (Chrome, Safari, v.v.). Nhưng parent.focus()không.

Đây là một jsfiddle hoàn chỉnh: https://jsfiddle.net/wv0w7uj7/3/

Mã:

function notifyMe() {
  if (Notification.permission !== "granted")
    Notification.requestPermission();
  else {
    var notification = new Notification('Notification title', {
      icon: 'http://cdn.sstatic.net/stackexchange/img/logos/so/so-icon.png',
      body: "You've been notified!",
    });

    notification.onclick = function () {
      parent.focus();
      window.focus(); //just in case, older browsers
      this.close();
    };
  }
}

1
Là bình thường để có 'này' tham khảo để anothe bối cảnh, nên thay vì gọi this.close, nó tốt hơn để gọi evt.target.closecủa sự kiện 'onclick': notification.onclick = function (evt) { evt.target.close(); }
Alejandro Silva

cha.focus (); làm việc cho tôi! làm việc trên chrome 68.0.3440.106
Johan Morales

2

Việc sử dụng thuộc onclicktính này không thực sự tốt , sử dụng addEventListenercho javascript vani hoặc onphương thức cho jQuery.

var notify = new Notification('Test notification');

Vanilla:

notify.addEventListener('click', function(e) {
    window.focus();
    e.target.close();
}, false);

jQuery:

$(notify).on('click', function(e) {
    window.focus();
    e.target.close();
});

0

Nó sẽ được this.close()khá hơn this.cancel(), như thế này:

var n = window.webkitNotifications.createNotification('ico.gif','Title', 'Text');
n.onclick = function(x) { window.focus(); this.cancel(); };
n.show();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.