-
Notifications
You must be signed in to change notification settings - Fork 35
others
hotoo edited this page May 3, 2013
·
1 revision
嗅探 JavaScript 异常,捕获异常信息:
- 行号
- 出错文件
- 错误消息
- 错误上下文(函数体,调用过程)
- DOCTYPE:
"BackCompat" != document.compatMode
- 编码
head>*:first-child == meta[charset]
head>*:first-child == meta[http-equiv][content=text/html; charset=xxx]
script[src]:has([charset])
link[rel=stylesheet]:has([charset])
- 文档标题:
head>title
- HTTPS 页面中是否有引用 HTTP 资源
object[codebase=uri]
object>param[src=uri]
object>param[name=movie][value=uri]
embed[src=uri]
script[src=uri]
link[href=uri]
iframe[src=uri]
frame[src=uri]
- 重复 ID 检查
- 元素异常嵌套情况
p>*:not(block-level)
pre>*:not(block-level)
inline>*:not(block-level)
label[for]
img[alt][width[height]]
- ?:
textarea[rows][cols]
- img, javascript, css, flash 这些资源的使用情况
- 文档大小
在DOMReady后再请求一次当前地址,获得当前页面的HTML源码。然后解析源码:
/^(\s*|<!--.*?-->)<!DOCTYPE\s+[^>]+>/
- Charset: [同 DOMLint]
- Title: [同 DOMLint]
- 重复ID检测: [同 DOMLint]
- 标签非法嵌套情况
- !
inline>block-level
- !
p p
- !
h[1-6]>block-level
- !
pre>block-level
- !
- 标签的闭合情况
label[for]
img[alt][width][height]
- ?:
textarea[rows][cols]
- img, javascript, css, flash 这些资源的使用情况
- 文档大小
通过再发一次当前页面地址的GET请求,获取HTML源码的方式有以下风险:
- PV 倍增,服务器压力倍增
- 无法获取POST提交的页面的源码
- 服务端设置的token导致重复请求,而使获取的源码不一致
- 重复请求对业务可能的影响
所以这种获取源码的方式只适用于使用GET请求访问、仅用于信息展示作用的页面。
另一种方法与DOM类似,取出的内容是被解析过的结果: document.getElementsByTagName('html')[0].outerHTML document.documentElement.outerHTML
终极方法是实现客户端插件,直接读取用户的浏览器缓存。
-
http://www.mnot.net/cache_docs/ Caching Tutorial
-
http://www.mnot.net/javascript/xmlhttprequest/cache.html XMLHttpRequest Caching Tests
-
http://discuss.joelonsoftware.com/default.asp?joel.3.193583.5 Get html source in javascript
[ { tagStart:"", attrs:{}, tagName: "!DOCTYPE", tagEnd: null, children:null, parent: null }, { tagStart:"<html xmlns="http://...">", attrs:[ xmlns:"http://..." ] tagName:"html", tagEnd:"
saijs.github.io