とあるゲームにハマっていたので、タイトルも前フリも思いつかないくらい余裕が無い。レビューも書きたいし。

GUID/UUID

SafariはGUIDをどこで作成しているのかと思ってたら、がちゃんとあるらしい。ちょっと検索してみたらCFUUIDもあった。GUIDで検索したのがいけなかったのか。

data URL

base64変換はOpenSSLが一番手っ取り早いようだ。頑張ってAPIを呼んでみたけどあまり反応が良くない。別スレッドで実行させようにも実行権限委譲のタイミングが無いので、しょうがなくNSTaskで直接opensslコマンドを呼んでパイプにデータを押し込むと言う遠回りな方法をとった。なのに反応が鈍い。
大きめのデータでも変換は割とすぐに終わるっぽい。要はバイト列を増量するだけの処理なんだからUIのレスポンスに影響する訳は無いか。ただ大量の文字列を表示するのに馬鹿正直に幅と高さを算出するのに時間を喰ってるのだろう。
変換したURLをクリップボードに登録してSafariOperaのアドレスバーに貼付けたら素直に表示してくれた。ただFirefoxだと巨大な文字列をアドレスバーにペーストできないらしい。一旦Safariで開いてDebugメニューから呼び出してみたら中途半端に表示された。これはAppleEventの問題かなぁ?

NSViewの透過

ページホルダの機能をどう再現しようか考えているとき、リンク抽出の際は表示中のページがグレイアウトして白い文字色のリストが現れると言うビジョンがふと浮かんだ。WebInspectorがWebViewの前面に張り付いている感じ。
Quartzだから透過なんて楽勝と高を括ってたら、パフォーマンスの関係で兄弟関係のNSViewはまともに透過できないらしい。と言うか試してみたらスクロールの際にゴミが付いてったりとおかしな事になってた。たぶんQuartz 2D Extremeが標準になればまともになるかも知れないのだけど。

フォーカス検知

それらしいキーワードで検索しても自分の書いたモノしか引っかからないと言うのは異様に寂しい気分になる。
windowScriptObjectAvailableで貰えるウインドウオブジェクトはどうやら初期化は終わってないらしく、HTML文書中のscript要素で記述するような気分でevaluateWebScriptを呼ばないほうがいい。setValue以外は避けるべし。
ロード終了後、DOMDocumentオブジェクトをほじくり出すのではなく、普通にwindowScriptObjectを貰ってaddEventListenerを呼べばちゃんとDOMFocusInイベントが通知される事がわかった。ただ他所のWebページの名前空間を汚染したくないから、イベントリスナはWebScriptingを実装したオブジェクトをcallWebScriptMethodで直接登録した方がいいだろう。問題はロードが正常終了して且つWebページ側でイベントの詐称が無い場合だけしかまともに機能しない事。

NSWindowとパス

タイトルバーのCommand+Clickでパスメニューが出るのはMac OS Xでは標準的な機能なのだが、これがプロクシアイコンと一緒にファイルシステムとがっぷり組んでいるらしく、そこに手を出すメソッドがNSWindowには用意されていない。でもSafariはちゃんとパスメニューが出る。
参考になるコードはどこかに無いかと探したのだが、ひょっとしてタイトルバーのCommand+Clickでパスメニューが出るWebブラウザってSafariとOmniWebとInternet Explorerだけ?