簡體   English   中英

Chrome擴展程序在頁面加載之前注入腳本

[英]Chrome extension inject script before page load

我正在第三方網站上開發Chrome應用程序。

我嘗試更改的文檔具有以下頁面格式:

<head>
.
.meta data here
.
</head>
<body>
  <script type="text/javascript">
    function a1(){
      ..contents of function a1
    }
  </script>

  .
  .other contents of body
  .
  <script type="text/javascript">
     a1();  // <-- I don't want this to be executed
  </script>
</body>

我的問題是我希望加載整個頁面,但函數調用a1();除外。

所以我想到了一個簡單的解決方案:在函數定義之前 函數a1(){..},我想將a1創建為不執行任何操作的CONSTANT函數,因此使a1()調用無效。

問題是,如果我在run_at document_start的js中將函數定義為常量,則執行環境會有所不同,因此不會影響頁面。

因此,要在同一執行環境中運行的替代方法是使用innerHTML + =“ ...”來注入代碼

另一種選擇是使用“ createElement”構造一個腳本元素,而src是一個外部js文件,必須在執行之前加載它。

這兩種選擇都不起作用,因為沒有在run_at document_start腳本中創建解析樹。

因此,我想到了另一種解決方案。 我為DOMModifySubTree事件添加了偵聽器,希望更改解析順序(我知道,這聽起來很有趣:)),以便不調用該函數。 無濟於事。

所以,我的問題是如何防止調用a1()函數? PS-我無法聯系第三方網站開發人員。

Greasemonkey是您要找的東西。
這是一個Firefox擴展程序, 可以在您選擇的網頁中插入自己的腳本
訪問wiki.greasespot.net以開始編寫腳本。

值得一提的是,Chrome本身支持Greasemonkey腳本。 請參閱此頁面以獲取更多信息。

抱歉,回復晚了。 我最初跳過該函數調用所做的是,我在文檔開始時運行了一個腳本,並將其注入到“文檔”中(因為JS在單獨的envi中運行)。 在我使用的注入腳本中

const a1=function(){};

這樣,當再次聲明該函數時,該函數不會被覆蓋,因此該函數不會執行(即,它正在執行我們的偽函數),從而實質上破壞了代碼。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM