webdino / amethyst

Simple WebViewer App for embedded systems (patches for Firefox/Gecko)
https://gecko-embedded.org/docs/webviewer/
5 stars 1 forks source link

WebViewer 用の XUL を用意する #4

Closed dynamis closed 5 years ago

dynamis commented 5 years ago

amber.xul のような単純に web content 用の iframe を含むだけの xul window から始めて、iframe URL を固定値ではなくコマンドライン引数から受け取れるようにするなど、最低限 Web ビューとして使い勝手が良くなる程度まで実装したい。

hATrayflood commented 5 years ago

コマンドライン引数で指定したurlを受け取る方法を調査中。 https://dxr.mozilla.org/mozilla-esr60/source/browser/base/content/browser.js#1791 https://dxr.mozilla.org/mozilla-esr60/source/browser/base/content/browser.js#1669 browser.xulのwindow.argumentsに入るようだが、なぜか空文字になってしまっているので原因を探る。

hATrayflood commented 5 years ago

https://github.com/webdino/amethyst/commit/c7d88b5cf0c369b4c1e3a2e67fae150444605214 コマンドラインで指定したURLを開けるようになりました。 ./mach run https://www.renesas.com/とすると、起動時に指定のページをロードします。 @dynamis

dynamis commented 5 years ago
dynamis commented 5 years ago

別に無くて良いかなと思っている機能:

hATrayflood commented 5 years ago

@dynamis https://github.com/webdino/amethyst/commit/c86b3cf80e5c0830aec5d8bed57b0fd08b9ddfd2 backspaceで戻るができるようになりました。

dynamis commented 5 years ago

そうですよね、browser 要素ですよね。(笑) https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/browser

Firefox のサイドバー内のブラウザビューとか今でも browser 要素のようだし。

コマンドライン引数受ける件は nsICommandLine なんてのもありましたね: https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsICommandLine 使用例サンプルコード:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<script type="application/x-javascript"> <![CDATA[
    function init_browser()
        {
        var cmdLine = window.arguments[0];
        cmdLine = cmdLine.QueryInterface(Components.interfaces.nsICommandLine);
        document.getElementById('id_browser').src = cmdLine.handleFlagWithParam("test", false));
        }
]]></script>

 <window id="main" title="Amethyst WebViewer" width="800" height="600" 
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
    onload="init_browser();">
        <browser id='id_browser' type="content" src="http://google.com/" flex="1"/>
</window>

]]></script>

そして、昔 minimal なブラウザ実装のサンプルとか公開されたよねっていってたビルド、今頃やっと見つけましたので、これは参考にしましょう。10 年ぐらいぶりに見て懐かしいコードです:

dynamis commented 5 years ago

@hATrayflood コマンドライン引数起動ですが、現状のコードだと第一引数が URL であることを要求しているかと思います。

firefox http://urls.jp/gemqa -start-debugger-server 6000

ならいいけど

firefox -start-debugger-serve http://urls.jp/gemqa
firefox -start-debugger-server 6000 http://urls.jp/gemqa

などだとダメになってしまう感じです。上記リンクした nsICommandLine なんかを使って第一引数以外でもハンドルできるようにして頂けないでしょうか。

hATrayflood commented 5 years ago

了解です。対応します。

dynamis commented 5 years ago

起動時 URL の件、今は引数なしだと空白ウィンドウで悲しい気持ちになるので何か開きたいですが、引数ちゃんと読むようにするついでに URL 指定が無い場合ホームページ設定を見に行くのが親切じゃないかと思っています (about:config などでも簡単に設定できるし)

今回の修正ついでに以下のようなフローにして頂ければ幸い:

hATrayflood commented 5 years ago

@dynamis url引数の件ですが、start-debugger-server の場合、直後の引数は常にポート番号を意味し、これは数値でなくともそう解釈するような動作になっているようです。例えば以下のような場合

firefox --start-debugger-server https://www.renesas.com/

https://www.renesas.com/ はポート番号として引数が消費されてしまい、ページを開くような動作にはなりませんでした。

firefox --start-debugger-server https://www.renesas.com/ https://www.google.com/

こうすると、googleのページだけ表示されました。

firefox --start-debugger-server 6000 https://www.renesas.com/ https://www.google.com/

この場合は、引数に与えられたurlはそれぞれ別々のタブに表示されました。 ですので、start-debugger-server に絡む動作としては firefox 本来のものと同じとなります。(この挙動自体もおかしいと思いますが)

hATrayflood commented 5 years ago

@dynamis https://github.com/webdino/amethyst/commit/769786e65abd07d69c595d55717797442d38bd10 初期表示urlの変更対応しました。

dynamis commented 5 years ago

webrtc, form validation メッセージなどいくつか細かな点が見つかって順次対応しているが、今後も個別の問題は個別 issue で扱うとしてこちらはもう完了済みとしてクローズ