1 |
wakaba |
1.1 |
<!DOCTYPE HTML> |
2 |
|
|
<html> |
3 |
|
|
<head> |
4 |
|
|
<title></title> |
5 |
|
|
<script src="../../support/result.js"></script> |
6 |
|
|
<style> |
7 |
|
|
.result-match { |
8 |
|
|
background-color: green; |
9 |
|
|
color: white; |
10 |
|
|
} |
11 |
|
|
.result-notmatch { |
12 |
|
|
background-color: white; |
13 |
|
|
color: blue; |
14 |
|
|
} |
15 |
|
|
.result-na { |
16 |
|
|
background-color: gray; |
17 |
|
|
color: black; |
18 |
|
|
} |
19 |
|
|
.result-na .result-notmatch { |
20 |
|
|
background-color: transparent; |
21 |
|
|
color: #C0C0C0; |
22 |
|
|
} |
23 |
|
|
</style> |
24 |
|
|
</head> |
25 |
|
|
<body> |
26 |
|
|
|
27 |
|
|
<noscript>FAIL (noscript)</noscript> |
28 |
|
|
|
29 |
|
|
<table> |
30 |
|
|
<thead> |
31 |
|
|
<tr><th>HTTP <code>charset=""</code> parameter |
32 |
|
|
<th><code>charset</code><th><code>characterSet</code> |
33 |
|
|
<th><code>inputEncoding</code> |
34 |
|
|
<tbody id=result-tbody></table> |
35 |
|
|
|
36 |
|
|
<iframe style="width: 0; height: 0"></iframe> |
37 |
|
|
|
38 |
|
|
<script> |
39 |
|
|
var iframe = document.getElementsByTagName ('iframe')[0]; |
40 |
|
|
var resultTBody = document.getElementById ('result-tbody'); |
41 |
|
|
|
42 |
|
|
var xhr = new XMLHttpRequest (); |
43 |
|
|
xhr.open ('GET', 'list.txt', false); |
44 |
|
|
xhr.send (null); |
45 |
|
|
var names = xhr.responseText.toLowerCase ().split (/\n/).sort (); |
46 |
|
|
|
47 |
|
|
var lastData; |
48 |
|
|
doNext (); |
49 |
|
|
|
50 |
|
|
function doNext () { |
51 |
|
|
if (names.length > 0) { |
52 |
|
|
if (document.all && !window.opera) { |
53 |
|
|
iframe.onreadystatechange = function () { |
54 |
|
|
if (this.readyState == 'complete') { |
55 |
|
|
addData (); |
56 |
|
|
} |
57 |
|
|
}; |
58 |
|
|
} else { |
59 |
|
|
iframe.onload = addData; |
60 |
|
|
} |
61 |
|
|
var n = encodeURIComponent (names[0]).replace (/%2[Ff]/g, '/'); |
62 |
|
|
iframe.src = 'charset.cgi/' + n + '?' + (lastData ? 'c1' : 'c2'); |
63 |
|
|
} else { |
64 |
|
|
iframe.onload = null; |
65 |
wakaba |
1.2 |
showSummary (); |
66 |
wakaba |
1.1 |
} |
67 |
|
|
} // doNext |
68 |
|
|
|
69 |
|
|
function addData () { |
70 |
|
|
var doc = iframe.contentWindow.document; |
71 |
|
|
if (!lastData) { |
72 |
|
|
lastData = [doc.charset, doc.characterSet, doc.inputEncoding]; |
73 |
|
|
doNext (); |
74 |
|
|
return; |
75 |
|
|
} |
76 |
|
|
|
77 |
|
|
var tr = document.createElement ('tr'); |
78 |
|
|
if (lastData[0] != doc.charset || |
79 |
|
|
lastData[1] != doc.characterSet || |
80 |
|
|
lastData[2] != doc.inputEncoding) { |
81 |
|
|
tr.className = 'result-na'; |
82 |
|
|
} |
83 |
|
|
lastData = null; |
84 |
|
|
|
85 |
|
|
var name = names.shift (); |
86 |
|
|
tr.appendChild (document.createElement ('th')) |
87 |
|
|
.appendChild (document.createElement ('code')) |
88 |
|
|
.appendChild (document.createTextNode (name)); |
89 |
|
|
|
90 |
|
|
var v = doc.charset; |
91 |
|
|
if (v != null) { |
92 |
|
|
var td = tr.appendChild (document.createElement ('td')); |
93 |
|
|
td.appendChild (document.createElement ('code')) |
94 |
|
|
.appendChild (document.createTextNode (v)); |
95 |
|
|
td.className = v.toLowerCase () == name ? 'result-match' : 'result-notmatch'; |
96 |
|
|
} else { |
97 |
|
|
tr.appendChild (document.createElement ('td')) |
98 |
|
|
.className = 'result-na'; |
99 |
|
|
} |
100 |
|
|
|
101 |
|
|
v = doc.characterSet; |
102 |
|
|
if (v != null) { |
103 |
|
|
var td = tr.appendChild (document.createElement ('td')); |
104 |
|
|
td.appendChild (document.createElement ('code')) |
105 |
|
|
.appendChild (document.createTextNode (v)); |
106 |
|
|
td.className = v.toLowerCase () == name ? 'result-match' : 'result-notmatch'; |
107 |
|
|
} else { |
108 |
|
|
tr.appendChild (document.createElement ('td')) |
109 |
|
|
.className = 'result-na'; |
110 |
|
|
} |
111 |
|
|
|
112 |
|
|
v = doc.inputEncoding; |
113 |
|
|
if (v != null) { |
114 |
|
|
var td = tr.appendChild (document.createElement ('td')); |
115 |
|
|
td.appendChild (document.createElement ('code')) |
116 |
|
|
.appendChild (document.createTextNode (v)); |
117 |
|
|
td.className = v.toLowerCase () == name ? 'result-match' : 'result-notmatch'; |
118 |
|
|
} else { |
119 |
|
|
tr.appendChild (document.createElement ('td')) |
120 |
|
|
.className = 'result-na'; |
121 |
|
|
} |
122 |
|
|
|
123 |
|
|
resultTBody.appendChild (tr); |
124 |
|
|
|
125 |
|
|
doNext (); |
126 |
|
|
} // addData |
127 |
wakaba |
1.2 |
|
128 |
|
|
function showSummary () { |
129 |
|
|
var nameList = {}; |
130 |
|
|
|
131 |
|
|
var trs = document.getElementsByTagName ('table')[0].rows; |
132 |
|
|
var trsL = trs.length; |
133 |
|
|
for (var i = 0; i < trsL; i++) { |
134 |
|
|
var tr = trs[i]; |
135 |
|
|
if (tr.className.match (/result-na/)) { |
136 |
|
|
continue; |
137 |
|
|
} |
138 |
|
|
|
139 |
|
|
var th = tr.firstChild; |
140 |
|
|
var td = th.nextSibling; |
141 |
|
|
if (td.className.match (/result-na/)) { |
142 |
|
|
td = td.nextSibling; |
143 |
|
|
if (td.className.match (/result-na/)) { |
144 |
|
|
continue; |
145 |
|
|
} |
146 |
|
|
} |
147 |
|
|
|
148 |
|
|
var canonName = td.innerText || td.textContent; |
149 |
|
|
var aliasName = th.innerText || th.textContent; |
150 |
|
|
if (!nameList[canonName]) nameList[canonName] = {}; |
151 |
|
|
nameList[canonName][aliasName] = true; |
152 |
|
|
} |
153 |
|
|
|
154 |
|
|
var dl = document.createElement ('dl'); |
155 |
|
|
for (var v in nameList) { |
156 |
|
|
dl.appendChild (document.createElement ('dt')) |
157 |
|
|
.appendChild (document.createTextNode (v)); |
158 |
|
|
for (var w in nameList[v]) { |
159 |
|
|
dl.appendChild (document.createElement ('dd')) |
160 |
|
|
.appendChild (document.createTextNode (w)); |
161 |
|
|
} |
162 |
|
|
} |
163 |
|
|
document.body.appendChild (dl); |
164 |
|
|
} // showSummary |
165 |
wakaba |
1.1 |
</script> |
166 |
|
|
|
167 |
|
|
</body> |
168 |
|
|
</html> |