2015-07-20 269 views
2

我對這個Chrome擴展的東西有點新,我試圖在執行前修改腳本。Chrome瀏覽器擴展 - 執行前修改腳本

例子:

<script type="text/javascript"> 
    function() { 
     var count = 10; 
     countDown = setInterval(function() { 
      if(count == 0) { 
       // do Stuff 
      } 
      count--; 
     }, 1000); 
    } 
</script> 

我的目標是無論是從網站上刪除該腳本(之前執行它),注入我自己(我已經做了注射部分)或修改(例如集數到20,所以需要20秒)。

我已經嘗試了很多東西,但我找不到一個好方法。

希望你能幫助我:)

+0

使用的getElementsByTagName獲取所有腳本和檢查是正確的(作品),然後使用.parentNode.removeChild將其刪除。 – Niphram

+0

你可以通過計數作爲函數的參數嗎? –

+0

該腳本是在HTML頁面內,我不知道ii可以做到這一點,如果它立即執行(也是我的JavaScript知識有限) 最好的事情是停止腳本執行,然後我可以使用我自己的腳本 – Niphram

回答

2

這將是相當困難的劫持上飛的那部分,但至少你可以停止計時器。

所有你需要做的就是調用

clearInterval(countDown); 

..in正確的上下文。

此時extension architectureisolated worlds的概念發揮作用。

可與網頁互動的擴展程序的唯一部分是內容腳本。但是,內容腳本存在於單獨的上下文中:

內容腳本在稱爲孤立世界的特殊環境中執行。他們可以訪問他們注入的頁面的DOM,但不能訪問頁面創建的任何JavaScript變量或函數。它會查看每個內容腳本,就好像其上運行的頁面上沒有執行其他JavaScript一樣。反過來也是如此:頁面上運行的JavaScript不能調用任何函數或訪問由內容腳本定義的任何變量。

但是您需要訪問該頁面的JavaScript。有一種方法,通過injecting your code into the page as a <script> tag

var script = document.createElement('script'); 
script.textContent = "clearInterval(countDown);"; 
(document.head||document.documentElement).appendChild(script); 
script.parentNode.removeChild(script); 
相關問題