我一直在尝试为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);
}
})();
答案 0 :(得分:2)
是的,您可以通过以下几种方式调用该代码:
将适当的源代码粘贴到脚本中。
或
在iframe中调用原始页面并从那里调用该函数。同域iframe更容易,但这也可以跨域完成。
或
GM_xmlhttpRequest()
抓取原始页面的源代码。从源中提取适当的脚本节点,并将该代码注入当前目标页面。以前的userscripts和greasemonkey问题都涵盖了所有这些方法。
答案 1 :(得分:1)
不,您无法从另一个页面调用一个页面上的脚本。您必须在每个需要使用它的页面中包含代码。
有用于加载脚本的库(例如RequireJS)可用于将脚本从JavaScript加载到页面中,但您仍然需要像这样加载脚本。