'Denetlenmemiş runtime.lastError: Yanıt alınmadan önce ileti bağlantı noktası kapandı' Chrome sorunu nasıl düzeltilir?


140

Projem için VueJS ve Laravel kullanıyorum. Bu konu son zamanlarda gösterilmeye başladı ve eski git dallarında bile kendini gösteriyor.

Bu hata yalnızca Chrome tarayıcısında gösterilir.


3
Reklam engelleyiciniz var mı?
Maelig

1
Bu diğer isteğe cevabımı kontrol edin: stackoverflow.com/questions/53919591/…
Dolfiz

3
Teşekkürler çocuklar, sorun "Video Downloader professional" uzantısıydı.
Triumf Maqedonci

2
Benim için aynısı, Video Downloader profesyoneli bu tür hatalar üretiyordu
sinedsem

1
Kabul edilen çözüm bir yapılandırma sorunu olduğundan ve programlama sorununun nedeninin düzeltilmesi / anlaşılmasıyla ilgili olmadığı için kapatma oylaması oyu verir.
Greg Domjan

Yanıtlar:


166

Chrome'da yüklü tüm uzantıları devre dışı bıraktım - benim için çalışıyor. Artık konsolu hatasız temizledim.


20
MeddleMonkey devre dışı
terantul

7
Bu sorunu yaşadım, Norton Safe Search Extension
Boardy

7
Benim durumumda uzantı, Google Yayıncı Araç Çubuğu idi
Leandro Castro

3
Benim için "Norton Safe Web" idi.
frankfurt-laravel

2
Tüm uzantıları nasıl devre dışı bırakmak bir çözümdür ... veya hatta bir değerlendirme. Birçoğumuz için uzantılar temel işlevsellik sağlar.
Vince

53

Bu hataya neden olmayı bırakmaya çalışan bir uzantı geliştiriciyseniz, burada yolunuzu araştıran bir uzantı geliştiriciyseniz:

Konudur değil CORB bloke CORS olarak tezahür uyarılar olarak benzeri -

Cross-Origin Read Blocking (CORB) , MIME tipi text / html ile https://www.example.com/example.html çapraz kaynak yanıtını engelledi . Daha fazla ayrıntı için https://www.chromestatus.com/feature/5629709824032768 bakın.

Sorun büyük olasılıkla runtime.sendMessage'a yanlış yönetilen zaman uyumsuz bir yanıttır. As MDN diyor :

Eşzamansız bir yanıt göndermek için iki seçenek vardır:

  • olay dinleyicisinden true döndür. Bu, sendResponse işlevini dinleyici döndükten sonra geçerli tutar, böylece onu daha sonra çağırabilirsiniz.
  • Olay dinleyicisinden bir Söz döndürür ve yanıtı aldığınızda çözümlenir (veya bir hata durumunda reddedilir).

Zaman uyumsuz bir yanıt gönderdiğinizde, ancak bu mekanizmalardan herhangi birini kullanamadığınızda, sağlanan sendResponseargüman sendMessagekapsam dışına çıkar ve sonuç tam olarak hata mesajının söylediği gibidir: mesaj portunuz (mesaj iletme aygıtı) yanıt verilmeden önce kapalıdır. Alınan.

Webextension-polyfill yazarları Haziran 2018'de bunun hakkında zaten yazmışlardır .

Sonuç olarak, uzantınızın bu hatalara neden olduğunu görürseniz - tüm onMessage dinleyicilerinizi yakından inceleyin. Bazılarının muhtemelen sözlerini yerine getirmeye başlaması gerekir (bunları eşzamansız olarak işaretlemek yeterli olacaktır). [Teşekkürler @vdegenne]


4
Bir uyarı async/awaitolarak, arka plan dinleyici geri araması için kullanmayın . Bu benim için başarısız olan şeydi, yapımı kaldırdım asyncve awaitbir thenyapı koduna dönüştürdüm ve şimdi çalışıyor.
vdegenne

ama ... herhangi bir yanıt göndermeye çalışmıyorum, yanıt da beklemiyorum!
Michael

Ne harika bir düzeltme, teşekkürler! Tek yapmam gereken chrome.runtime.onMessage.addListener () fonksiyonumun return true;altına eklemek oldu ve sorun çözüldü! Bu işlevin içinde jQuery kullanıyorum , bu yüzden bu düzeltmeye ihtiyacım var. $.ajax
RcoderNY

42

Eğer giderseniz krom: // uzantıları / , sadece ve bir seferde her uzatma biri geçiş biri aslında konuyu tetiklediğini görebilirsiniz.

Uzantıyı kapattıktan sonra, hatayı gördüğünüz sayfayı yenileyin ve fareyi hareket ettirin veya tıklayın. Fare eylemleri, hata veren şeylerdir.

Böylece hangi uzantının soruna gerçekten neden olduğunu belirledim ve devre dışı bırakabildim.


2
Benim durumumda 1 parola uzantısıydı
Alexander Kim

benim durumumda Renk Kontrastı Analizörü idi
Michael Liquori

2
Benim durumumda Google Publisher Toolbarvivaldi://extensions
Shim-Sao

Evet, uzantıları tek tek devre dışı bırakın. Hataya neden olan birkaç uzantı olduğunu anladım! Teşekkürler
Jose Mhlanga

17

Gönderi oldukça eski ve Chrome uzantılarının geliştirilmesiyle yakından ilgili değil, ancak burada olmasına izin verin.

Geri aramada mesaja yanıt verirken aynı sorunu yaşadım. Çözüm, arka plan ileti dinleyicisinde true döndürmektir .

İşte background.js'nin basit bir örneği . Popup.js'deki herhangi bir mesaja yanıt verir.

chrome.runtime.onMessage.addListener(function(rq, sender, sendResponse) {
    // setTimeout to simulate any callback (even from storage.sync)
    setTimeout(function() {
        sendResponse({status: true});
    }, 1);
    // return true;  // uncomment this line to fix error
});

İşte pop- up'ta mesaj gönderen popup.js . Background.js dosyasındaki "true" satırının açıklamasını kaldırana kadar istisnalar alırsınız .

document.addEventListener("DOMContentLoaded", () => {
    chrome.extension.sendMessage({action: "ping"}, function(resp) {
        console.log(JSON.stringify(resp));
    });
});

manifest.json , her ihtimale karşı :) Alarm izinleri bölümüne dikkat edin!

{
  "name": "TestMessages",
  "version": "0.1.0",
  "manifest_version": 2,
  "browser_action": {
    "default_popup": "src/popup.html"
  },
  "background": {
    "scripts": ["src/background.js"],
    "persistent": false
  },
  "permissions": [
    "alarms"
  ]
}

Benim için çalıştı! Varsayılan hangi senaryo return falseyararlı olacaktır?
Eduardo Reis

Dokümanlar diyor : This function becomes invalid when the event listener returns, unless you return true. Geçersiz ne demektir? yine de her mesaj aldığında oluşturulması gerekmiyor mu?
Eduardo Reis

@EduardoReis, FALSE ile bazı olayları bildirmek için bilgilendirici olarak kullanılabilir.
Aleksej Vasinov

14

Ben cevap vermiş bu .

Benim durumumda sorun şuydu Video Downloader professionalveAdBlock

Kısacası, bu sorun bazı google chrome eklentileri nedeniyle ortaya çıkıyor


6

Hata nedeni uzantı ise, gizli Ctrl+ Shift+ kullanın N. Gizli modda Chrome'da uzantılar yoktur.

UPD. ReduxDevTools gibi gizli modda bir uzantıya ihtiyacınız varsa, uzantı ayarlarında "Gizli modda izin ver" seçeneğini açın


4

Buraya Chrome 73'te bu hatayı gidermek için gelenler için, bir olasılık, Chrome 73'ten itibaren içerik komut dosyalarındaki çapraz kaynak isteklerini engellemesidir.

Daha fazla okuma:

  1. https://www.chromestatus.com/feature/5629709824032768
  2. https://www.chromium.org/Home/chromium-security/extension-content-script-fetches

Bu durum, uzantıları düzeltmek için çabalamaya ihtiyaç duyan birçok Chrome uzantısı yazarını etkiliyor, çünkü Chrome "Verilerimiz çoğu uzantının bu değişiklikten etkilenmeyeceğini gösteriyor."

(uygulama kodunuzla ilgisi yoktur)

GÜNCELLEME : CORs sorununu çözdüm ancak yine de bu hatayı görüyorum. Bunun Chrome'un hatası olduğundan şüpheleniyorum.


4

Bu hata genellikle Chrome uzantılarınızdan birinden kaynaklanır.

Bu Tek Tıklamalı Uzantı Devre Dışı Bırakıcıyı yüklemenizi öneririm , tüm uzantılarımı hızlı bir şekilde devre dışı bırakmak / etkinleştirmek için COMMAND (⌘)+ SHIFT (⇧)+ D- klavye kısayoluyla kullanıyorum .

Uzantılar devre dışı bırakıldığında bu hata mesajı kaybolmalıdır.

Barış! ✌️



2

Doğru sözdizimini kullandığınızdan emin olun.

SendMessage () yöntemini dinledikten sonra kullanmalıyız .

İşte basit bir örnek contentScript.js için bu sendrequest app.js .

contentScript.js

chrome.extension.sendRequest({
    title: 'giveSomeTitle', params: paramsToSend
  }, function(result) { 
    // Do Some action
});

app.js

chrome.extension.onRequest.addListener( function(message, sender, 
 sendResponse) {
  if(message.title === 'giveSomeTitle'){
    // Do some action with message.params
    sendResponse(true);
  }
});

sendRequest kullanımdan kaldırıldısendMessage
user889030

1

Tarayıcıda herhangi bir anti-virüs uzantısı yüklüyse devre dışı bırakın. Benim durumumda, antivirüs uzantısı suçluydu.



0

Benim durumumda, kendi sayfa kaynağımda ayarlanmış bir kesme noktasıydı. Kesme noktasını kaldırırsam veya devre dışı bırakırsam, hata düzelir.

Kesme noktası, orta derecede karmaşık bir işleme kodu yığınındaydı. Sayfanın farklı bölümlerindeki diğer kesme noktalarının böyle bir etkisi olmadı. Her zaman bu hatayı tetikleyen basit bir test senaryosu oluşturamadım.


0

Konsol günlük verilerini bir sekmeden diğerine gönderiyordum ve ilk konsola gerçekten ihtiyacım yoktu. Ancak hata mesajı beni rahatsız etti, bu yüzden sağ tıklayıp "x web sitesinden mesaj gösterme" seçeneğini seçtim. Belki bu en kolay çözümdür :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.