今日、Facebook アプリのアプリ ビルダーで動的プレビュー サンプルとして使用するために、Facebook 共有ダイアログをスクレイピングする必要がありました。Firebug 1.5 コードベースを使用して、新しいコンテキスト メニュー オプション「インライン スタイルで HTML をコピー」を追加しました。lib.js から getElementHTML 関数をコピーし、これを行うように変更しました。
- class、id、style 属性を削除
- onclick および同様の JavaScript ハンドラを削除します
- すべてのデータ属性を削除します
- 明示的な href を削除し、それらを「#」に置き換えます
- すべてのブロック レベル要素を div に、インライン要素を span に置き換えます (ターゲット ページでスタイルが継承されないようにするため)。
- 相対 URL を絶対化する
- 適用されたすべてのデフォルト以外の css 属性を新しいスタイル属性にインライン化します
- トラバージョン DOM ツリーアップによるスタイリングの親子継承を考慮して、インライン スタイルの肥大化を減らす
- インデント出力
単純なページではうまく機能しますが、Firebug (または Firefox?) のバグのため、ソリューションは 100% 堅牢ではありません。しかし、すべての癖をデバッグおよび修正できる Web 開発者が操作すれば、間違いなく使用できます。
これまでに見つけた問題:
- clear css プロパティが発行されないことがあります (レイアウトがかなり崩れます)。
- :hover およびその他の疑似クラスは、この方法ではキャプチャできません
- firefox はそのモデルに mozilla 固有の css プロパティ/値のみを保持するため、たとえば、-webkit-border-radius が失われます。これは、CSS パーサーによってスキップされたためです。
とにかく、このソリューションは多くの時間を節約しました。当初、私は手動でスタイルシートの一部を選択し、手動で選択して後処理を行っていました。それは遅く、退屈で、クラスの名前空間を汚染していました。Facebook マークアップを数時間ではなく数分でスクレイピングできるようになり、エクスポートされたマークアップはページの残りの部分に干渉しません。