未捕获的ReferenceError :(函数)未定义

时间:2012-10-12 21:23:06

标签: javascript google-chrome userscripts

我一直在尝试为Google Chrome编写我的第一个用户脚本。它检查路由器页面并重新连接,直到它获得有效的IP地址。

我将脚本保存为IPchecker.user.js,并通过扩展程序页面将其安装在Google Chrome中。但是当我刷新页面时,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);
    }
})();

2 个答案:

答案 0 :(得分:2)

是的,您可以通过以下几种方式调用该代码:

  1. 将适当的源代码粘贴到脚本中。

  2. 在iframe中调用原始页面并从那里调用该函数。同域iframe更容易,但这也可以跨域完成。

  3. 使用GM_xmlhttpRequest()抓取原始页面的源代码。从源中提取适当的脚本节点,并将该代码注入当前目标页面。
  4. 以前的问题都涵盖了所有这些方法。

答案 1 :(得分:1)

不,您无法从另一个页面调用一个页面上的脚本。您必须在每个需要使用它的页面中包含代码。

有用于加载脚本的库(例如RequireJS)可用于将脚本从JavaScript加载到页面中,但您仍然需要像这样加载脚本。