React頁面插入script


項目中遇到插入廣告的需要,而廣告的信息只是一個url鏈接,這個鏈接返回的時一個js,和以前插入廣告有點不同。所有找了很多方式。

先來展示廣告鏈接返回的信息:

假設廣告鏈接為:http://192.168.1.1:8081/advert/getAdvert?flowerId=1987&advertType=2

鏈接返回的信息,目的是在指定位置插入廣告元素div節點:

(function(){
  var json = {"AdvertName":"圖片廣告","AdvertDesc":"圖片廣告","AdvertHeight":"100%","AdvertId":63102,"AdvertImage":"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=831914849,3674285067&fm=11&gp=0.jpg",
          "AdvertWidth":"100%","JumpUrl":"http://192.168.1.1:8081/advert/JumpAdvert?advertId=63102&flowerId=1987&orderMark=763db82c8480485ea5a98594d8d69ebc&merchantCode=","AdvertWord":"圖片廣告"};   var div = document.createElement("div"); //創建一個div元素   div.style.width = "100%";   div.style.overflow = "hidden";   var img = document.createElement("img"); //創建一個img元素   img.src = json.AdvertImage;   img.style.maxWidth="100%";   img.onclick = function(){location.href=json.JumpUrl;} //img元素增加一個click事件,調整到指定頁面   div.appendChild(img); //將img元素插入的div元素中   var scripts = document.getElementsByTagName("script"); //**注意:這行代碼目的是添加創建的div元素到指定位置,對應但對於react這種已經渲染的,就會發現script在id=root元素外面,導致無法看到效果,原生的html是一行一行執行,所有可以正常渲染。   var script = scripts[scripts.length - 1];   var dom = script.parentNode;   dom.removeChild(script);   dom.appendChild(div);   div = null;   img = null;   scripts = null;   script = null;   dom = null; })();

失敗一:

<div id="append"  style={{width:'100%', height: 200}}>
     {/*在指定位置引用廣告鏈接, 結果被當成一個文本顯示,效果就好像被注釋的代碼一樣沒有任何效果。*/}
     <script type="text/javascript" src='http://192.168.1.1:8081/advert/getAdvert?flowerId=1987&advertType=2'></script>
</div>

失敗二, 使用dangerousInnerHTML方式:

 <div id="append"  style={{width:'100%', height: 200}} dangerouslySetInnerHTML={{__html:"<script type='text/javascript' src='http://192.168.1.1:8081/advert/getAdvert?flowerId=1987&advertType=2'></script>"}}>
  </div>

結果都沒效果,但在界面上有節點顯示:

 

 最后使用了document.createElement創建script元素

  componentWillMount() {
    let script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'http://192.168.1.1:8081/advert/getAdvert?flowerId=1987&advertType=2';
    document.getElementById('root').appendChild(script);  
  }

//如果在componentWillMount中插入,只能指定root,因為此時頁面還沒有渲染出來,找不到append元素,需要在指定位置渲染,就要在componentDidMount中此時元素已經渲染完成
componentDidMount () { 
let script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'http://192.168.1.1:8081/advert/getAdvert?flowerId=1987&advertType=2';
document.getElementById('append').appendChild(script);
}

此時廣告元素已經出來只是位置不對,這里應該可以讓接口那里調整下,或者接口直接返回廣告的div元素,可以嘗試把廣告元素拖到指定位置就可以看到效果

 

下面來展示在原生HTML的實現:

 <body>
    <div>
    廣告位一:
        <script type="text/javascript" src='http://192.168.1.1:8081/advert/getAdvert?flowerId=1987&advertType=2'></script>
    <div>
    <div>
    廣告位二:
        <script type="text/javascript" src='http://192.168.1.1:8081/advert/getAdvert?flowerId=1987&advertType=2'></script>
    <div> 
 </body> 

效果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 如需在 HTML 頁面中插入 JavaScript,請使用 不彈框"> 為什么在留言處插入不彈框 頁面中