Estoy tratando de enviar la URL de la pestaña actualmente activa a un script de Python. Mi extensión ya comienza a ejecutar el script e intenta enviar la URL. Sin embargo, hasta ahora no he podido recibir la URL con el script en ejecución.
ventana emergente.js:
dlvideo.addEventListener("click", async () => { chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => { // Get current url url = tabs[0].url; // Connect to python script port = chrome.runtime.connectNative('com.ytdlp.batdlvideo'); port.onDisconnect.addListener(function() { console.log("Disconnected"); }); port.onMessage.addListener(function(msg) { console.log("Received" + msg); }); // Send url to script port.postMessage({ text: url }); }); });dlvideo.py (el código parece atascarse aquí al comienzo del ciclo while):
import sys if sys.platform == "win32": import os, msvcrt msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY) msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) url = None while True: # The loop seems to get stuck here: text_length_bytes = sys.stdin.read(4) if len(text_length_bytes) == 0: print("test.py: sys.exit0") sys.exit(0) text_length = struct.unpack('i', text_length_bytes)[0] text = sys.stdin.read(text_length).decode('utf-8') if text.startswith('http'): url = text print(str(url)) break else: print(text)Otros archivos probablemente no sean relevantes, pero los pondré aquí por si acaso: yt_dlp.bat:
@echo off start cmd /k python "%~dp0/dlvideo.py" %*manifestAPP.json:
{ "name": "com.ytdlp.batdlvideo", "description": "Youtube-dlp", "path": "C:\\Users\\.....\\native-apps\\dlvideo\\yt_dlp.bat", "type": "stdio", "allowed_origins": [ "chrome-extension://-extensionid-/" ] }¿Alguien puede ayudar?
Ok, creo que en mi caso, el problema fue que solo se envió un mensaje al host y el host aún no está listo para el momento en que se envía.
Bueno, este al menos es el código que funcionó para mí:
popup.js y manifestAPP.json pueden permanecer igual.
dlvideo.py:
import struct import json import sys import os # Changes the stdio-mode if sys.platform == "win32": import os, msvcrt msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY) msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) # Read native message from chrome window text_message_length = sys.stdin.buffer.read(4) text_length = struct.unpack("i", text_message_length)[0] text_decoded = sys.stdin.buffer.read(text_length).decode("utf-8") text_asstr = json.loads(text_decoded) # Get URL url = text_asstr['text']yt_dlp.bat:
@echo off python dlvideo.py %*