【问题标题】:Native messaging doesn't work as expected on youtube.com原生消息在 youtube.com 上无法按预期工作
【发布时间】:2019-05-15 15:53:50
【问题描述】:

扩展程序只是检索活动选项卡的 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";

这是我在“https://www.youtube.com/”上尝试将 URL 返回到本机应用程序时的日志文件

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 上。

【问题讨论】:

  • 我注意到tab 是一个全局变量。可能存在页面重定向的竞争条件吗?可能有点影响
  • 我实际上是等到整个页面加载后再测试它,所以它可能不是我认为的重定向!此外,在 javascript 中只有一个线程来处理事件循环。因此,没有可能出现竞争条件。另外,我首先将 url 复制到变量“tab”,然后在控制台中打印它 - 成功。问题在于发送到本机应用程序。 @LightnessRacesinOrbit

标签: javascript c++ stdin stdio chrome-native-messaging


【解决方案1】:

来自std::cin的类型std::istream documentation,可以阅读:

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 将它们链接起来。

【讨论】:

  • 我认为问题在于 EOF 条件不是预期的
  • @LightnessRacesinOrbit 我一定错过了什么。你能详细说明一下吗?
  • 除了将您指向问题之外,别想我可以添加任何内容;)您似乎在回答“我如何检测 EOF”,但 OP 已经检测到 EOF(尽管在更多手动方式)并询问此特定网站的为什么会发生(为什么他们的应用没有收到网站 URL)。
  • 我当然同意 OP应该 有你所展示的代码,但这不是他们询问我是否理解正确的问题的症结
  • @LightnessRacesinOrbit 我担心你是对的。不过我不愿意删除它。
猜你喜欢
  • 2010-09-28
  • 2013-09-17
  • 2019-01-15
  • 2014-10-20
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
相关资源
最近更新 更多