js__JSONP__跨域

1: 什么是同源策略

  • 最初兽掰,它的含義是指,A網(wǎng)頁設(shè)置的 Cookie,B網(wǎng)頁不能打開,除非這兩個網(wǎng)頁"同源",所謂"同源"指的是"三個相同".
    協(xié)議相同
    域名相同
    端口相同

  • 舉例來說:
    http://www.example.com/dir/page.html
    這個網(wǎng)址協(xié)議是http://揖赴,域名是www.example.com,端口是80(默認(rèn)端口可以省略),它的同源情況如下.
    http://www.example.com/dir2/other.html:同源
    http://example.com/dir/other.html:不同源(域名不同)
    http://v2.www.example.com/dir/other.html:不同源(域名不同)
    http://www.example.com:81/dir/other.html:不同源(端口不同)
    https://www.example.com:81/dir/other.html:不同源(https協(xié)議不同)

2: 什么是跨域抑胎?跨域有幾種實(shí)現(xiàn)形式

  • 跨域出現(xiàn)的原因
    JavaScript出于安全方面的考慮燥滑,不允許一個網(wǎng)頁訪問一個非同源的網(wǎng)頁,即2個網(wǎng)址的協(xié)議相同,域名相同,端口相同其中任意一個不同就是非同源.
  • 概念:只要協(xié)議、域名圆恤、端口有任何一個不同突倍,都被當(dāng)作是不同的域。
    比如:有一個Ajax的var xhr=new XMLHttpRequest()的xhr對象,在a網(wǎng)址里發(fā)生請求到一個非同源的b網(wǎng)址,會請求的報錯.
不跨域會出現(xiàn)圖片的的報錯
  • 跨域就是為了解決這個問題盆昙,實(shí)現(xiàn)非同源網(wǎng)頁之間的數(shù)據(jù)傳輸和通信.

跨域常見方式

  • JSONP(JSON with Padding 填充式JSON 或參數(shù)式JSON)

  • CORS(Cross-Origin Resource Sharing羽历,跨源資源共享)

  • HTML5的window.postMessage
    window.postMessage(message,targetOrigin) 方法是html5新引進(jìn)的特性,可以使用它來向其它的window對象發(fā)送消息淡喜,無論這個window對象是屬于同源或不同源秕磷,目前IE8+、FireFox炼团、Chrome澎嚣、Opera等瀏覽器都已經(jīng)支持window.postMessage方法。
    window.postMessage允許兩個窗口/幀之間跨域發(fā)送數(shù)據(jù)消息瘟芝。從本質(zhì)上講易桃,window.postMessage是一個跨域的無服務(wù)器墊片的Ajax。

  • 降域: document.domain
    使用條件
    有其他頁面 window 對象的引用,
    二級域名相同,
    協(xié)議相同,
    端口相同

//在頁面 http://www.example.com/a.html 中設(shè)置document.domain:
<iframe src="example.com/b.html" id="iframe" onload="test()"></iframe>
    <script>
        document.domain='example.com';//設(shè)置成主域
        function test(){
            alert(document.getElementById('iframe').contentWindow);
        }
    </script>
//在頁面 http://example.com/b.html中也設(shè)置document.domain
<script>
        document.domain='example.com';//在iframe載入的這個頁面也設(shè)置 document.domain與主頁面相同
</script>
//而且是必須的锌俱,雖然這個文檔的domain就是example.com,但是還是必須顯示的設(shè)置document.domain的值

3: JSONP 的原理是什么

  • JSONP (JSON with Padding)是一個簡單高效的跨域方式晤郑,html中的script標(biāo)簽可以加載并執(zhí)行其他域的JavaScript,于是我們可以通過script標(biāo)記來動態(tài)加載其他域的資源,例如我要從域A的頁面pageA加載域B的數(shù)據(jù)贸宏,那么在域B的頁面pageB中我以JavaScript的形式聲明pageA需要的數(shù)據(jù)造寝,然后在pageA中用script標(biāo)簽把pageB加載進(jìn)來,那么pageB中的腳本就會得以執(zhí)行吭练。JSONP在此基礎(chǔ)上加入了回調(diào)函數(shù)诫龙,pageB加載完之后會執(zhí)行pageA中定義的函數(shù),所需要的數(shù)據(jù)會以參數(shù)的形式傳遞給該函數(shù)鲫咽。JSONP易于實(shí)現(xiàn)签赃,但是也會存在一些安全隱患,如果第三方的腳本隨意地執(zhí)行分尸,那么它就可以篡改頁面內(nèi)容姊舵,截獲敏感數(shù)據(jù)。但是在受信任的雙方傳遞數(shù)據(jù)寓落,JSONP是非常合適的選擇括丁。

  • .css,.js,圖片的引用和jsonp跨域拿到j(luò)s方法有什么區(qū)別 ?
    相同點(diǎn):
    在html里.js,圖片的引用和jsonp拿到j(luò)s的方法是一樣的,都是從服務(wù)器那到j(luò)s文件然后插入到html里.
    不同:
    只不過出發(fā)點(diǎn)是不一樣,前者是加載資源,后者為了跨域拿后臺返回的js.
    jsonp還多了一個回調(diào),區(qū)別是出發(fā)點(diǎn)和應(yīng)用方法不同,但都有從服務(wù)器返回的資源.

4: CORS是什么

  • CORS(Cross-Origin Resource Sharing)跨域資源共享,定義了必須在訪問跨域資源時伶选,瀏覽器與服務(wù)器應(yīng)該如何溝通.CORS背后的基本思想就是使用自定義的HTTP頭部讓瀏覽器與服務(wù)器進(jìn)行溝通史飞,從而決定請求或響應(yīng)是應(yīng)該成功還是失敗.跨域后瀏覽器不會返回數(shù)據(jù).

  • **簡單請求 **

瀏覽器將CORS請求分成兩類:簡單請求(simple request)和
簡單請求條件
1) 請求方法是以下三種方法中的一個:
HEAD
GET
POST
2)HTTP的頭信息不超出以下幾種字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三個值application/x-www-form-urlencoded、multipart/form-data仰税、text/plain
凡是不同時滿足上面兩個條件构资,就屬于非簡單請求

  • 使用
    在服務(wù)器后臺設(shè)置header屬性Access-Control-Allow-Origin
    它的值是請求時Origin字段的值或者 * ,* 表示接受任意域名的請求。
app.get('/getNews', function(req, res){

    var news = [
        "第11日前瞻:中國沖擊4金 博爾特再戰(zhàn)200米羽球",
    ]
    var data = [];
    for(var i=0; i<3; i++){
        var index = parseInt(Math.random()*news.length);
        data.push(news[index]);
        news.splice(index, 1);
    }
    res.header("Access-Control-Allow-Origin", "http://a.jrg.com:8080"); //代表只接受http://a.jrg.com:8080網(wǎng)址的請求
    //res.header("Access-Control-Allow-Origin", "*"); //*表示接受任意域名的請求

    res.send(data);
})
  • 非簡單請求
    是那種對服務(wù)器有特殊要求的請求陨簇,比如請求方法是PUT或DELETE吐绵,或者Content-Type字段的類型是application/json。
    非簡單請求的CORS請求,會在正式通信之前己单,增加一次HTTP查詢請求唉窃,稱為"預(yù)檢"請求(preflight).
    瀏覽器先詢問服務(wù)器,當(dāng)前網(wǎng)頁所在的域名是否在服務(wù)器的許可名單之中纹笼,以及可以使用哪些HTTP動詞和頭信息字段纹份。只有得到肯定答復(fù),瀏覽器才會發(fā)出正式的XMLHttpRequest請求廷痘,否則就報錯蔓涧。
  • CORS與JSONP的比較
    CORS與JSONP的使用目的相同,但是比JSONP更強(qiáng)大,但CORS不支持IE6.7.8.
    JSONP只支持GET請求笋额,CORS支持所有類型的HTTP請求元暴。JSONP的優(yōu)勢在于支持老式瀏覽器,以及可以向不支持CORS的網(wǎng)站請求數(shù)據(jù).

跨域問題
跨域10種方式

5: 演示三種常用以上跨域的解決方式

  • jsonp
    參考阮一峰

  • 先在客戶端上設(shè)置 新 Hosts
    127.0.0.1 a.jrg.com
    127.0.0.1 b.jrg.com
    127.0.0.1 jrg.com

router.js


app.get('/getNews', function(req, res){
var news = [
'我沒有特別的才能兄猩,只有強(qiáng)烈的好奇心昨寞。永遠(yuǎn)保持好奇心的人是永遠(yuǎn)進(jìn)步的人∠寐耍——愛因斯坦',

'愛因斯坦認(rèn)為他之所以取得成功援岩,原因在于他具有狂熱的好奇心.',
'求知欲,好奇心這是人的永恒的掏导,不可改變的特性享怀。哪里沒有求知欲,哪里便沒有學(xué)校趟咆√泶桑——蘇霍姆林斯基',

'孩子提出的問題越多,那么他在童年早期認(rèn)識周圍的東西也就愈多值纱,在學(xué)校中越聰明鳞贷,眼睛愈明,記憶力愈敏銳虐唠。要培養(yǎng)自己孩子的智力搀愧,那你就得教給他思考〗ィ——蘇霍姆林斯基',

'我想起了自己小學(xué)的學(xué)習(xí)經(jīng)歷,終于理解了為什么小時候成績好,我那時候確實(shí)好奇心非常強(qiáng)烈.',
'人的內(nèi)心里有一種根深蒂固的需要——總想感到自己是發(fā)現(xiàn)者咱筛、研究者、探尋者杆故。在兒童的精神世界中迅箩,這種需求特別強(qiáng)烈。但如果不向這種需求提供養(yǎng)料处铛,即不積極接觸事實(shí)和現(xiàn)象饲趋,缺乏認(rèn)識的樂趣拐揭,這種需求就會逐漸消失,求知興趣也與之一道熄滅奕塑。(蘇霍姆林斯基)',

'生活的全部意義在于無窮地探索尚未知道的東西堂污,在于不斷地增加更多的知識【舸ǎ——左拉'
    ]
    var data = [];
    for(var i=0; i<3; i++){
        var index = parseInt(Math.random()*news.length);
        data.push(news[index]);
        news.splice(index, 1);//把data數(shù)組里已經(jīng)有的元素從news數(shù)組里刪除,保證不重復(fù)上一步拿到的新聞
    }
    var cb = req.query.callback
    if(cb){
        res.send(cb + '('+ JSON.stringify(data) + ')');
    }else{
        res.send(data);
    }   
})

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>news</title>
<style>
  .container{
    width: 900px;
    margin: 0 auto;
  }
</style>
</head>
<body>
  <div class="container">
    <ul class="news">
      <li>我沒有特別的才能,只有強(qiáng)烈的好奇心 ——愛因斯坦</li>
      <li>我沒有特別的才能息楔,只有強(qiáng)烈的好奇心 ——愛因斯坦</li> 
      <li>我沒有特別的才能寝贡,只有強(qiáng)烈的好奇心 ——愛因斯坦</li>
    </ul>
    <button class="change">點(diǎn)我換一組</button>
  </div>
  
<script>
  
  $('.change').addEventListener('click', function(){
    var script = document.createElement('script');
    script.src = 'http://gaygay.com:8080/getNews?callback=appendHtml';//必須是'http://xxx.com:8080/的形式
   
    document.head.appendChild(script);
    document.head.removeChild(script);
  })
  
  function appendHtml(news){
    var html = '';
    for( var i=0; i<news.length; i++){
      html += '<li>' + news[i] + '</li>';
    }
    console.log(html);
    $('.news').innerHTML = html;
  }
  function $(id){//$函數(shù),發(fā)請求前和點(diǎn)擊換一組都調(diào)用.傳入?yún)?shù),直接返回.
    return document.querySelector(id);//替換$(id)為document.querySelector(id),因?yàn)闉g覽器不支持jquery庫
  }
</script>

</body>

</html>

結(jié)合上面的案例說下jsonp的本質(zhì):


后臺判斷:
 var cb = req.query.callback
    if(cb){
        res.send(cb + '('+ JSON.stringify(data) + ')');
    }

場景:
A網(wǎng)訪問跨域的B網(wǎng)資源:
在A網(wǎng)通過給script標(biāo)簽的src賦值一個網(wǎng)址.
例子: var script = document.createElement('script');
    script.src = 'http://gaygay.com:8080/getNews?callback=appendHtml'

這個網(wǎng)址帶有回調(diào)的方法名.加載script腳本到B網(wǎng)頁,B網(wǎng)頁發(fā)回消息去調(diào)用在A網(wǎng)頁腳本里定義的回調(diào)函數(shù).callback.

6.CORS案例

QQ20170512-220224-HD.gif
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>news</title>
<style>
 .container{
   width: 900px;
   margin: 0 auto;
 }
</style>
</head>
<body>
 <div class="container">
   <ul class="news">
     <li>CORS練習(xí)</li>
     <li>男雙力爭會師決賽 </li> 
     <li>女排將死磕巴西!</li>
   </ul>
   <button class="change">換一組</button>
 </div>
 
<script>
 
 $('.change').addEventListener('click', function(){
   var xhr = new XMLHttpRequest();
   xhr.open('get', 'http://b.jrg.com:8080/getNews', true);
   xhr.send();
   xhr.onreadystatechange = function(){
     if(xhr.readyState === 4 && xhr.status === 200){
       appendHtml( JSON.parse(xhr.responseText) )
     }
   }
   window.xhr = xhr//why?
 })
 function appendHtml(news){
   var html = '';
   for( var i=0; i<news.length; i++){
     html += '<li>' + news[i] + '</li>';
   }
   console.log(html);
   $('.news').innerHTML = html;
 }
 function $(id){
   return document.querySelector(id);
 }
</script>
</html>

router.js


app.get('/getNews', function(req, res){

    var news = [
        "第11日前瞻:中國沖擊4金 博爾特再戰(zhàn)200米羽球",
        "正直播柴飚/洪煒出戰(zhàn) 男雙力爭會師決賽",
        "女排將死磕巴西值依!郎平安排男陪練模仿對方核心",
        "沒有中國選手和巨星的110米欄 我們還看嗎圃泡?",
        "中英上演奧運(yùn)金牌大戰(zhàn)",
        "博彩賠率挺中國奪回第二紐約時報:中國因?qū)κ址幎鴣G失的獎牌最多",
        "最“出柜”奧運(yùn)?同性之愛閃耀里約",
        "下跪拜謝與洪荒之力一樣 都是真情流露"
    ]
    var data = [];
    for(var i=0; i<3; i++){
        var index = parseInt(Math.random()*news.length);
        data.push(news[index]);
        news.splice(index, 1);
    }
    res.header("Access-Control-Allow-Origin", "http://jrg.com:8080"); 
    //res.header("Access-Control-Allow-Origin", "*"); 
    res.send(data);

7.document.domain降域

QQ20170513-104421-HD.gif

情景:a.html里面嵌入iframe元素,且這個iframe是<iframe src="http://b.jrg.com:8080/b.html" frameborder="0" ></iframe>,而b.html就是個其中src規(guī)定顯示在 iframe 中的文檔的地址,也是絕對 URL - 指向其他站點(diǎn)(比如 src="www.example.com/index.html"),這里是個非同源的b.html

//a.html文件

<html>
<style>
  .ct{
    width: 910px;
    margin: auto;
  }
  .main{
    float: left;
    width: 450px;
    height: 300px;
    border: 1px solid #ccc;
  }
  .main input{
    margin: 20px;
    width: 200px;
  }
  .iframe{
    float: right;
  }
  iframe{
    width: 450px;
    height: 300px;
    border: 1px dashed #ccc;
  }
</style>

<div class="ct">
  <h1>使用降域?qū)崿F(xiàn)跨域</h1>
  <div class="main">
    <input type="text" placeholder="http://a.jrg.com:8080/a.html">
  </div>

  <iframe src="http://b.jrg.com:8080/b.html" frameborder="0" ></iframe>

</div>


<script>
//URL: http://a.jrg.com:8080/a.html
document.querySelector('.main input').addEventListener('input', function(){
  console.log(this.value);
  window.frames[0].document.querySelector('input').value = this.value;
})

document.domain = "jrg.com"http://降域關(guān)鍵代碼
</script>
</html>


//b.html
<html>
<style>
    html,body{
        margin: 0;
    }
    input{
        margin: 20px;
        width: 200px;
    }
</style>

    <input id="input" type="text"  placeholder="http://b.jrg.com:8080/b.html">
<script>

 
document.querySelector('#input').addEventListener('input', function(){
    window.parent.document.querySelector('input').value = this.value;
})
document.domain = 'jrg.com';
</script>
</html>


  • window.frames[0].postMessage
//a.html文件

<html>
<style>
    .ct{
        width: 910px;
        margin: auto;
    }
    .main{
        float: left;
        width: 450px;
        height: 300px;
        border: 1px solid #ccc;
    }
    .main input{
        margin: 20px;
        width: 200px;
    }
    .iframe{
        float: right;
    }
    iframe{
        width: 450px;
        height: 300px;
        border: 1px dashed #ccc;
    }
</style>

<div class="ct">
    <h1>使用postMessage實(shí)現(xiàn)跨域</h1>
    <div class="main">
        <input type="text" placeholder="http://a.jrg.com:8080/a.html">
    </div>

    <iframe src="http://localhost:8080/b.html" frameborder="0" ></iframe>

</div>


<script>
//URL: http://a.jrg.com:8080/a.html
$('.main input').addEventListener('input', function(){
    console.log(this.value);
    window.frames[0].postMessage(this.value,'*');//window.frames[0]是window子窗口的第一個.*代表任意地址

})
window.addEventListener('message',function(e) {
        $('.main input').value = e.data
    console.log(e.data);
});

//
window.addEventListener('message',function(e){
  $('.mian input').value = e.data;
})


function $(id){
    return document.querySelector(id);
}
</script>
</html>
//b.html文件:即被內(nèi)嵌的iframe鏈接文檔url.
<html>
<style>
    html,body{
        margin: 0;
    }
    input{
        margin: 20px;
        width: 200px;
    }
</style>

    <input id="input" type="text"  placeholder="http://b.jrg.com:8080/b.html">
<script>

 
 //傳出數(shù)據(jù)到內(nèi)嵌此窗口的父窗口即a.html.
$('#input').addEventListener('input', function(){
    window.parent.postMessage(this.value, '*');//
    //返回當(dāng)前窗口的父窗口對象.如果一個窗口沒有父窗口,則它的 parent 屬性為自身的引用.
    //如果當(dāng)前窗口是一個 <iframe>, <object>, 或者 <frame>,則它的父窗口是嵌入它的那個窗口
})

//接收信息
window.addEventListener('message',function(e) {
        $('#input').value = e.data
    console.log(e.data);
});
function $(id){
    return document.querySelector(id);
}   
</script>
</html>

跨域?qū)嵗拇a參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末愿险,一起剝皮案震驚了整個濱河市颇蜡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辆亏,老刑警劉巖风秤,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扮叨,居然都是意外死亡缤弦,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門彻磁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碍沐,“玉大人,你說我怎么就攤上這事衷蜓±厶幔” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵磁浇,是天一觀的道長斋陪。 經(jīng)常有香客問我,道長置吓,這世上最難降的妖魔是什么鳍贾? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮交洗,結(jié)果婚禮上骑科,老公的妹妹穿的比我還像新娘。我一直安慰自己构拳,他們只是感情好咆爽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布梁棠。 她就那樣靜靜地躺著,像睡著了一般斗埂。 火紅的嫁衣襯著肌膚如雪符糊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天呛凶,我揣著相機(jī)與錄音男娄,去河邊找鬼。 笑死漾稀,一個胖子當(dāng)著我的面吹牛模闲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播崭捍,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼尸折,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了殷蛇?” 一聲冷哼從身側(cè)響起实夹,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粒梦,沒想到半個月后亮航,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡匀们,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年塞赂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昼蛀。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡宴猾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叼旋,到底是詐尸還是另有隱情仇哆,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布夫植,位于F島的核電站讹剔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏详民。R本人自食惡果不足惜延欠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望沈跨。 院中可真熱鬧由捎,春花似錦、人聲如沸饿凛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至心肪,卻和暖如春锭亏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背硬鞍。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工慧瘤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人固该。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓锅减,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蹬音。 傳聞我的和親對象是個殘疾皇子上煤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Section1休玩、為什么要跨域著淆? 自古以來(1995年起),為了用戶的信息安全拴疤,瀏覽器就引入了同源策略永部。那么同源策...
    qhaobaba閱讀 381評論 0 0
  • Section1、為什么要跨域呐矾? 自古以來(1995年起)苔埋,為了用戶的信息安全,瀏覽器就引入了同源策略蜒犯。那么同源策...
    不去解釋閱讀 551評論 0 0
  • 1.什么是同源策略 1.要了解同源策略,我們必須先知道源即orgin 以百度頁面為例淘菩,谷歌瀏覽器打開控制臺:輸入l...
    GarenWang閱讀 1,448評論 2 8
  • 現(xiàn)代人就像一個貝殼 緊緊閉著就是不肯打開 因?yàn)槔锩嫣彳涀癜唷⑻率軅?而只有“美”才會讓它不防御 讓它放下戒備心,讓...
    SeanQD閱讀 640評論 0 1
  • 上篇的彩蛋大家看出來了吧。沒錯汇在,那篇武安君的遺書是我瞎編的翰萨。 繼續(xù)王翦的故事。 王翦封侯 類似的情形糕殉,也曾發(fā)生在王...
    三角貓閱讀 1,341評論 0 11