Chrome не может читать сообщение от нативного хоста длины сообщения, множество 256Javascript

Форум по Javascript
Ответить
Anonymous
 Chrome не может читать сообщение от нативного хоста длины сообщения, множество 256

Сообщение Anonymous »

Я строю расширение Chrome, которое использует местный хост обмена сообщениями для получения информации о DOM и передачи их в другое приложение. Во время моего тестирования мне удалось отправить сообщение в расширение Chrome, которое было ровно 266 байт в длину (270, учитывая 4 байта по длине). После некоторого исследования я обнаружил, что эта длина сообщения не единственная, что проблематична. Каждое кратное 256 (256, 512, 768, 1024, 1280, 1536, 1792, 2048, ... и особенно 2560), добавлены 10, иногда 20 и 30 , вызвал хромированное отопление от stdout хоста. Нативный хост продолжает отправлять данные и, в конечном счете, исключение « отправитель отправил неверное сообщение JSON; сообщение игнорируется. » появляется без контекста. После этого хром недействительный stdin нативного хоста, завершая его к концу. < /P>
Manifest < /p>

Код: Выделить всё

[...]
"manifest_version": 3,
"permissions": [
"storage",
"tabs",
"background",
"notifications",
"nativeMessaging",
"scripting",
"debugger"
],
"host_permissions": [
"https://*/*",
"http://*/*"
],
"background": {
"service_worker": "scripts/background.js"
},
"content_scripts": [
{
"matches": [
"http://*/*",
"https://*/*"
],
"js": [
"scripts/content.js"
]
}
],
[...]
< /code>
фоновый скрипт (образец) < /p>
const nativeID = "com.nmhost";
var nmhostPort = chrome.runtime.connectNative(nativeID);

const onNativeMessage = function (msg) {
// if (dbgFlag && dbgLvl == 3) {
//     console.log("Received: \n" + JSON.stringify(msg, null, 4));
// }
let ss = JSON.stringify(msg);
console.log(`Received:[${ss.length}]`);
return;
}

nmhostPort.onMessage.addListener(onNativeMessage);
nmhostPort.onDisconnect.addListener(function () {
console.error("NMHost Disconnected");
});
< /code>
Native Host (C ++) (образец) < /p>
/**
* @brief Get the Message from Chromium. If the length of the message is zero or less it does not read the message!
*
* @param buff The message buffer to return
* @return int32_t
*/
int32_t GetExtMessage(char *buff) {
// if stdin fails retry 3 times
for (int i = 0; i < STDIN_RETRY; i++) {
int32_t reqLen = 0;
std::cin.read(reinterpret_cast(&reqLen), 4);
if (reqLen > 0) {
std::cin.read(buff, reqLen);
return reqLen;
} else {
if (std::cin.fail()) {
std::cerr 

Подробнее здесь: [url]https://stackoverflow.com/questions/79492312/chrome-fails-to-read-message-fron-native-host-if-the-message-length-is-multiple[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»