1.1. fejezet, Natív alkalmazás hívás

Minta programok letöltése

mkdir ~/firefox-extensions/
cd ~/firefox-extensions/
git clone https://github.com/SphinxKnight/webextensions-examples.git

A natív alkalmazásokat regisztrálni kell a Manifest file locations-ben leírt helyen.

Natív alaklamzás regisztrálása Linuxon

A native-application regisztráláshoz létre kell hozni a native-messaging-hosts könyvtárat

mkdir ~/.mozilla/native-messaging-hosts/
nano ~/firefox-extensions/webextensions-examples/native-messaging/app/ping_pong.json
cp ~/firefox-extensions/webextensions-examples/native-messaging/app/ping_pong.json ~/.mozilla/native-messaging-hosts/

Natív alaklamzás regisztrálása Windows-on

Registry kulcs mutasson a ping_pong.json-ra

Az Add-on futtatása

Böngészőben a about:debugging#/runtime/this-firefox oldalt betöltve lehet az "Ideiglenes kiegészítő betöltése" gombbal betölteni a manifest.json fájlt, vagy a nodejs web-ext scripttel indítható a böngészőt:

cd ~/firefox-extensions/webextensions-examples/native-messaging/add-on
web-ext run

Böngészőben engedélyezni kell a /További eszközök/Böngészőkonzol (Ctrl+Shift+J) ablak beállításainál a "Tartalomüzenetek megjelenítése" menüpontot, hogy láthatók legyenek az üzenetváltások.

Forrás: Native-messaging extension

C# kód az STD-In/Out kezeléséhez

using System;
using System.IO;
using System.Text;
 
namespace Homework4STDInOutStream
{
    class Program
    {
        static void Main(string[] args)
        {
            using (Stream stdin = Console.OpenStandardInput())
            using (Stream stdout = Console.OpenStandardOutput())
            {
                byte[] buffer = new byte[2048];
                while (true)
                {
                    byte[] inMsgSize = new byte[4];
                    Int32 readedBytes = stdin.Read(inMsgSize, 0, inMsgSize.Length);
                    if (readedBytes > 0)
                    {
                        Int32 inMsgSize32 = BitConverter.ToInt32(inMsgSize);
                        File.AppendAllText("c:\\var\\log.txt", "inMsgSize32=["+ inMsgSize[0] + "," + inMsgSize[1] + "," + inMsgSize[2] + "," + inMsgSize[3] + "]");
                        byte[] buffer = new byte[inMsgSize32];
                        readedBytes = stdin.Read(buffer, 0, buffer.Length);
                        if (readedBytes > 0)
                        {
                            File.AppendAllText("c:\\var\\log.txt", "readedBytes=[" + readedBytes + "]");
                            byte[] outMsgSize = BitConverter.GetBytes(readedBytes);
                            stdout.Write(outMsgSize, 0, outMsgSize.Length);
                            stdout.Write(buffer, 0, readedBytes);
                            StringBuilder sb = new StringBuilder();
                            String log = System.Text.Encoding.Default.GetString(buffer, 0, readedBytes);
                            sb.Clear();
                            File.AppendAllText("c:\\var\\log.txt", log + "\r\n");
                        }
                    }
                }
            }
        }
    }
}

C# kód tesztelése

A DOS Terminál UTF-8 karakterkódolás beállításával kezdődik a .bat fájl

@chcp 65001>nul
echo árvíztűrő tükörfúró gép|Homework4STDInOutStream.exe