今天,我需要在 Facebook 应用程序的应用程序构建器中抓取 Facebook 共享对话框,用作动态预览示例。我采用了 Firebug 1.5 代码库并添加了一个新的上下文菜单选项“使用内联样式复制 HTML”。我已经从 lib.js 复制了他们的 getElementHTML 函数并对其进行了修改以执行此操作:
- 删除类、id 和样式属性
- 删除 onclick 和类似的 javascript 处理程序
- 删除所有 data-something 属性
- 删除显式href并将其替换为“#”
- 用 div 替换所有块级元素,用 span 替换内联元素(以防止在目标页面上继承样式)
- 绝对化相对 url
- 将所有应用的非默认 CSS 属性内联到全新的样式属性中
- 通过遍历 DOM 树考虑样式父/子继承来减少内联样式膨胀
- 缩进输出
它适用于更简单的页面,但由于 Firebug(或 Firefox?)中的错误,该解决方案并非 100% 健壮。但是,当由可以调试和修复所有怪癖的 Web 开发人员操作时,它绝对是可用的。
到目前为止我发现的问题:
- 有时不会发出清除 css 属性(它严重破坏了布局)
- :hover 和其他伪类无法以这种方式捕获
- firefox 仅在其模型中保留 mozilla 特定的 css 属性/值,因此例如您丢失 -webkit-border-radius,因为 CSS 解析器跳过了它
无论如何,这个解决方案节省了我很多时间。最初我是手动选择他们的样式表并进行手动选择和后处理。它缓慢、无聊并且污染了我们的类命名空间。现在我可以在几分钟而不是几小时内抓取 facebook 标记,并且导出的标记不会干扰页面的其余部分。