Нативный обмен сообщениями не работает должным образом на youtube.com - PullRequest
0 голосов
/ 14 декабря 2018

Расширение просто получает URL активной вкладки и отправляет его в собственное приложение.Это удается на всех других веб-сайтах, включая подстраницы YouTube, где воспроизводится видео.Та же проблема возникает как в Firefox, так и в Chrome.

Ниже приведен код для Chrome

chrome.tabs.query({currentWindow:true,active:true},onGot);

function onGot(tabs){
    tab=tabs[0].url;
    port.postMessage(tab);
    console.log(tab);
    console.log("Response sent!");
}

В собственном приложении я сначала читаю размер, а затем сообщение.Ниже приведен код для чтения размера.

    int num = 0;
    unsigned char c;
    log("Listening for data Attempt1");
    for (int i = 1;i <= 4;i++)
    {
        log("Waiting for chararcter");
        c = cin.get();
        int s = (i - 1) * 8 - 1;
        if (s < 0) s = 0;
        num = num | (((int)c) << s);
        log("Read Character from extension");
        log(int(c));
    }
    log("Output Size:");
    log(num);
    if (num <0 || num>1999)        *//EDIT*
        return "NULL";

Это мой лог-файл, когда я пытаюсь вернуть URL-адрес моего родного приложения, когда "https://www.youtube.com/"

Listening for data Attempt1
Waiting for chararcter
Read Character from extension
255
Waiting for chararcter
Read Character from extension
255
Waiting for chararcter
Read Character from extension
255
Waiting for chararcter
Read Character from extension
255
Output Size:
2147483647

0xFFFFFFFFэто конец файла. Это означает, что стандартный поток ввода закрыт. Это происходит только с youtube.com.

1 Ответ

0 голосов
/ 14 декабря 2018

Из std::cin типа std::istream документации можно прочитать:

int_type get();

Считывает один символ и возвращает его, если доступно.В противном случае возвращает Traits::eof() и устанавливает failbit и eofbit.

Если вы хотите изменить ваш код как можно меньше, проверьте c против Traits::eof():

c = cin.get();
if (c == decltype(std::cin)::traits_type::eof()) {
    break;
}

Улучшение, однако, заключалось бы в обработке чтения из std::cin и манипулировании данными в двух разных частях кода (две функции?), А затем, например, использования std::transform для их цепочки.

...