[{"data":1,"prerenderedAt":248},["ShallowReactive",2],{"sideproject-es-print-pruna-chrome-extension":3},{"id":4,"title":5,"body":6,"date":217,"description":218,"extension":219,"featured":220,"image":221,"locale":222,"meta":223,"navigation":236,"order":237,"path":238,"repo":239,"seo":240,"status":241,"stem":242,"technologies":243,"url":239,"__hash__":247},"sideprojects\u002Fes\u002Fsideprojects\u002Fprint-pruna-chrome-extension.md","PrintPruna (2026)",{"type":7,"value":8,"toc":209},"minimark",[9,13,17,28,33,36,72,79,83,106,118,122,133,143,147,157,175,179,195,198],[10,11,5],"h1",{"id":12},"printpruna-2026",[14,15,16],"p",{},"Extensión para Chrome y Firefox que permite marcar bloques HTML de la página actual para limpiarla antes de imprimirla a PDF. Sin servidor, sin datos que salgan del navegador: todo ocurre dentro de la misma pestaña.",[14,18,19,20,27],{},"Disponible en la ",[21,22,26],"a",{"href":23,"rel":24},"https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Fprintpruna\u002Fkhknmplelejchmmifcbllajjkimodinb",[25],"nofollow","Chrome Web Store",".",[29,30,32],"h2",{"id":31},"qué-hace","¿Qué hace?",[14,34,35],{},"Al hacer clic en el icono de la extensión se abre un pequeño menú con tres opciones:",[37,38,39,47,53],"ul",{},[40,41,42,46],"li",{},[43,44,45],"strong",{},"Selecciona",": marca el bloque que quieras conservar; el resto de la página se oculta. El bloque seleccionado se reajusta (~90% de ancho, centrado) para no perder legibilidad si dependía de un layout flex\u002Fgrid con los hermanos ahora ocultos.",[40,48,49,52],{},[43,50,51],{},"Elimina",": marca un bloque concreto y lo hace desaparecer, manteniendo el resto de la página intacta. Se puede usar varias veces seguidas para eliminar más de un bloque.",[40,54,55,58,59,63,64,67,68,71],{},[43,56,57],{},"Imprime",": abre el diálogo de impresión del navegador directamente (",[60,61,62],"code",{},"window.print()","), sin pasar por el teclado. Útil en páginas que bloquean ",[60,65,66],{},"Ctrl+P","\u002F",[60,69,70],{},"Cmd+P"," con JavaScript.",[14,73,74,75,78],{},"En los modos \"Selecciona\" y \"Elimina\", el cursor cambia a una cruceta y los elementos se resaltan al pasar el ratón por encima (azul para \"Selecciona\", rojo para \"Elimina\"). Haz clic sobre el elemento deseado para aplicar la acción, o pulsa ",[60,76,77],{},"Esc"," en cualquier momento para salir del modo de marcado sin hacer ningún cambio. Para volver al estado original de la página, basta con recargarla (F5).",[29,80,82],{"id":81},"bypass-del-bloqueo-de-ctrlp","Bypass del bloqueo de Ctrl+P",[14,84,85,86,89,90,93,94,97,98,101,102,105],{},"Algunas páginas bloquean el atajo de impresión con JavaScript para evitar que el usuario imprima o guarde el contenido en PDF. Cuando se activa cualquier opción del menú, PrintPruna instala un listener de ",[60,87,88],{},"keydown"," a nivel de ",[60,91,92],{},"window"," en fase de captura, que se adelanta a los listeners que la página haya enganchado en ",[60,95,96],{},"document",". Como la fase de captura recorre ",[60,99,100],{},"window → document → ...",", el listener de la extensión se ejecuta siempre primero y detiene la propagación sin llamar a ",[60,103,104],{},"preventDefault()",", dejando que el navegador haga su acción por defecto.",[14,107,108,109,111,112,114,115,27],{},"Es una mitigación \"best effort\": si la página engancha su listener directamente en ",[60,110,92],{}," antes de que se inyecte la extensión, este método no puede superarlo. Para esos casos está la opción \"Imprime\" del menú, que llama a ",[60,113,62],{}," desde el \"isolated world\" de la extensión y no se ve afectada aunque la página haya sobrescrito ",[60,116,117],{},"window.print",[29,119,121],{"id":120},"arquitectura","Arquitectura",[14,123,124,125,128,129,132],{},"Manifest V3 compartido entre Chrome y Firefox, con solo dos permisos (",[60,126,127],{},"activeTab",", ",[60,130,131],{},"scripting","):",[134,135,140],"pre",{"className":136,"code":138,"language":139},[137],"language-text","manifest.json     Manifest V3, compartido entre Chrome y Firefox\nsrc\u002Fpopup.html    Menú del icono con las opciones \"Selecciona\", \"Elimina\" e \"Imprime\"\nsrc\u002Fpopup.js      Inyecta el content script (si hace falta) y envía el modo elegido\nsrc\u002Fcontent.js    Lógica de hover, selección\u002Feliminación de bloques\nsrc\u002Fcontent.css   Estilos del resaltado en hover y el cursor de marcado\n","text",[60,141,138],{"__ignoreMap":142},"",[29,144,146],{"id":145},"instalación-en-modo-desarrollador","Instalación en modo desarrollador",[14,148,149,152,153,156],{},[43,150,151],{},"Chrome \u002F Edge \u002F Brave",": abre ",[60,154,155],{},"chrome:\u002F\u002Fextensions",", activa \"Modo de desarrollador\" y haz clic en \"Cargar extensión sin empaquetar\", seleccionando la carpeta del proyecto.",[14,158,159,152,162,165,166,169,170,27],{},[43,160,161],{},"Firefox",[60,163,164],{},"about:debugging#\u002Fruntime\u002Fthis-firefox"," y haz clic en \"Cargar complemento temporal\", seleccionando el archivo ",[60,167,168],{},"manifest.json",". La carga es temporal y se pierde al cerrar el navegador; para una instalación permanente habría que firmar la extensión vía ",[21,171,174],{"href":172,"rel":173},"https:\u002F\u002Faddons.mozilla.org",[25],"addons.mozilla.org",[29,176,178],{"id":177},"stack-tecnológico","Stack tecnológico",[37,180,181,184,192],{},[40,182,183],{},"Manifest V3",[40,185,186,187,128,189,191],{},"Chrome Extensions API (",[60,188,127],{},[60,190,131],{},")",[40,193,194],{},"JavaScript vanilla, sin dependencias",[196,197],"hr",{},[14,199,200,203,204],{},[43,201,202],{},"Código fuente:"," ",[21,205,208],{"href":206,"rel":207},"https:\u002F\u002Fgithub.com\u002Falbertsarle\u002Fprint-pruna",[25],"github.com\u002Falbertsarle\u002Fprint-pruna",{"title":142,"searchDepth":210,"depth":210,"links":211},2,[212,213,214,215,216],{"id":31,"depth":210,"text":32},{"id":81,"depth":210,"text":82},{"id":120,"depth":210,"text":121},{"id":145,"depth":210,"text":146},{"id":177,"depth":210,"text":178},"2026-09-22T12:00:00Z","Extensión para Chrome y Firefox que permite marcar bloques HTML de una página para limpiarla antes de imprimirla a PDF.","md",false,"\u002Fimages\u002Fsideprojects\u002Fprint-pruna-chrome-extension-banner.png","es",{"slug":224,"type":225,"categories":226,"tags":227,"achievements":231,"githubUrl":206},"print-pruna-chrome-extension","sideproject",[225],[228,229,183,230],"Chrome Extension","Firefox Extension","JavaScript",[232,233,234,235],"Extensión sin dependencias, compatible con Chrome, Edge, Brave y Firefox con el mismo manifest","Modo \"Elimina\" reutilizable varias veces seguidas para limpiar más de un bloque","Bypass del bloqueo de Ctrl+P: window.print() llamado desde el \"isolated world\" de la extensión, no interceptable por la página","Listener de teclado en fase de captura que se adelanta a los scripts de la página que intentan bloquear el atajo de impresión",true,1,"\u002Fes\u002Fsideprojects\u002Fprint-pruna-chrome-extension",null,{"title":5,"description":218},"published","es\u002Fsideprojects\u002Fprint-pruna-chrome-extension",[244,245,246],"Manifest V3 (compartido Chrome\u002FFirefox)","Chrome Extensions API (activeTab, scripting)","JavaScript vanilla","2lffUopNbt5ulXHwy3ARsMlc38FxdZjhvI2QomNFS9s",1790587323143]