簡體   English   中英

未捕獲的ReferenceError :(函數)未定義

[英]Uncaught ReferenceError: (function) is not defined

我一直在嘗試為Google Chrome編寫我的第一個用戶腳本。 它檢查路由器頁面並重新連接,直到它獲得有效的IP地址。

我將腳本保存為IPchecker.user.js並通過擴展頁面將其安裝在谷歌瀏覽器中。 但是當我刷新頁面時,javascript控制台會拋出一個錯誤:

Uncaught ReferenceError: wan_connect is not defined 

在這種情況下,wan_connect是在原始頁面上定義的函數:

<html>
<head>
<script type="text/javascript">
    function serv(service, sleep)
    {
     form.submitHidden('service.cgi', { _service: service, _redirect: 'status-overview.asp', _sleep: sleep });
    }
    function wan_connect(wanid)
    {
     if (wanid == "1") {
     serv('wan1link-restart', 5);
     }
     if (wanid == "2") {
     serv('wan2link-restart', 5);
     }
    }

    //All other stuff deleted...

</script>
</head>
<body> Also deleted...</body>
</html>

這是我的劇本。 看起來它無法識別原始頁面中的功能。 有辦法打電話嗎?

// ==UserScript==  
// @name         WAN checker
// @version      0.0.1
// @description  Check tomato IP addresses and reconnect as needed
// @match        *://192.168.1.1/status-overview.asp
// ==/UserScript== 

(function reconnect() {
    wan1ip = document.getElementById('wanip').getElementsByClassName('content')[0].innerText.split('.').slice(0,2).join('.');

    if (wan1ip != "333.3333") {
    wan_connect("1");
    setTimeout("reconnect()",2000);
    }
    wan2ip = document.getElementById('wan2ip').getElementsByClassName('content')[0].innerText.split('.').slice(0,2).join('.');
if (wan2ip != "333.333") {
    wan_connect("2");
    setTimeout("reconnect()",2000);
    }
})();

是的,您可以通過以下幾種方式調用該代碼:

  1. 將適當的源代碼粘貼到腳本中。

    要么

  2. 在iframe中調用原始頁面並從那里調用該函數。 同域iframe更容易,但這也可以跨域完成。

    要么

  3. 使用GM_xmlhttpRequest()來獲取原始頁面的源代碼。 從源中提取適當的腳本節點,並將該代碼注入當前目標頁面。

所有這些方法已經被覆蓋,在一定程度上在以前問題。

不,您不能從另一個頁面調用一個頁面上的腳本。 您必須在每個需要使用它的頁面中包含代碼。

有一些腳本加載庫(例如RequireJS)可用於將腳本從JavaScript加載到頁面中,但您仍然需要可以像這樣加載腳本。

暫無
暫無

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

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