HTML頁面去除小尾巴
最近新浪的SAE開始實名認證(http://sae.sina.com.cn/ 新注冊還是免費,但它那么坑我會打廣告么)。
不認證的話訪問服務器上的頁面會提示認證,如下圖:
吐槽:
實名認證又是拍照,又是需要各種資料,擔心廣告騷擾與隱私各種balabala問題…
而且本來就是因為懶得本地配置服務器才用SAE(煩人的開機啟動SQL服務、各種安全隱患的Apache…,丟掉丟掉統統丟掉~),當初順便玩了把微信平台的機器人應答,其實也就自己一個人在訪問,因此打算流量用完再做打算…
度娘里搜到的解決辦法又是各種不相干,感到煩躁之余自己稍微看了下,是SAE自動在未認證的頁面尾部加上了一個<div>
<div style="z-index:2147483647;position:fixed;_position:absolute;top:0;left:0;right:0;padding:12px;background-color:rgba(0,0,0,0.5);filter: progid:DXImageTransform.Microsoft.gradient(startcolorstr=#7F000000,endcolorstr=#7F000000);color:#fff;text-align:center;font-size:16px;font-family:simsun,serif;cursor:default;"><p style="margin:0;padding:0;">該頁面的提供者尚未完成<a style="text-decoration:none;color:#37afe4;" target="_blank" href="http://sae.sina.com.cn/?m=faq&a=view&doc_id=22">實名認證</a>,您的訪問可能存在風險</p><a style="position:absolute;right:12px;top:50%;font-size:20px;color:#fff;border:none;margin:0;padding:0;;margin-top:-10px;line-height:20px;background:none;cursor:pointer;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;outline:none;" onclick="this.parentNode.style.display='none'">×</a></div>本着注入的想法,直接在頁面尾部加上了HTML注釋標簽 "<!--"
</body> </html> <!--這里就插一半,瀏覽器能自動補全另一半
這樣的話靜態頁面便能注釋掉煩人的小尾巴了
后面發現IE跟chrome處理半個標簽的方式不太一樣,IE還是有些問題
不知道HTML是否能在結尾添加上類似 EOF 這類結尾標志,如有更好的辦法請在留言處討論下哈,我再加進來
@Beta3.0 補充:靜態頁面我原來是設置最后一個div的display為none。 那么應該可以嘗試在JS里取出最后個DIV刪掉
數據頁面待解決
但讓我比較困擾的是SAE在服務器返回的JSON數據頁面最后也附上了小尾巴,導致正常的JSON包變得無法解析。
而JSON貌似並不支持注釋(包括/* 與// 只能用於JavaScript),以下就嘗試了在結尾加上/*
此外 echo "\n//"; 也試了,同樣不行。
這里求各位大哥幫我支兩招
權宜之計(字符串過濾)
既然有人需要,這里就貼下目前我對數據頁面的解決方式。
1) 在php數據頁面里加入結束標志,我這里用換行加注釋符 "\r\n<!--",代碼如下
1 …… 2 3 echo json_encode($json_arr); 4 echo "\r\n<!--"; 5 6 ……
2) 在JS數據接收的時候進行字符串截取。只接受 "<!--" 前的數據 作為JSON,代碼如下
1 $.ajax({ 2 type: 'post', 3 url:'.XXXX.php', 4 5 //注意:這里不能直接用JSON格式傳輸 6 //dataType: "json", 7 //contentType: "application/json; charset=utf-8", 8 9 dataType: "application/x-www-form-urlencoded", 10 contentType: "application/x-www-form-urlencoded; charset=utf-8", 11 complete:function(data){ 12 //可以通過控制台查看下過濾效果 13 console.log(data.responseText); 14 console.log(data.responseText.split('<!--')[0]); 15 console.log(JSON.parse(data.responseText.split('<!--')[0])); 16 data = JSON.parse(data.responseText.split('<!--')[0]) 17 //data = JSON.parse(data.responseText); 18 for(one in data.……){ 19 …… 20 } 21 } 22 } 23 })