我一直在为Chrome (作为一个扩展)写一个Greasemonkey脚本,以便在Facebook上使用。我知道Greasemonkey是沙箱的,至少就Firefox而言,除非你在浏览器中改变设置,否则你不能用脚本关闭窗口。然而,我知道大多数浏览器允许父窗口关闭子窗口,而不需要用户的确认。无论如何,我正在尝试让我的脚本打开一个窗口,从HTML对象中抓取一段文本,然后在按下页面上的一个按钮后关闭窗口。
我打开窗口的代码如下所示:
function birthday(linkAddress) {
var winNew=window.open(linkAddress, "_blank", "height=100", "width=100");
/*code to be run on page*/
winNew.close()
}窗口打开得很好,但我在Chrome中得到了一个javascript错误,说“无法调用未定义的方法'close‘”。我假设我的对象与Greasemonkey沙箱有关,但我不知道是什么问题。在Chrome中使用Greasemonkey脚本关闭窗口是可能的吗?是否需要启用某些设置?或者是我的代码错了?请记住,这段代码是从主窗口页面中的函数运行的,我在脚本中使用编写到该页面的按钮的onClick事件将该函数设置为等于该函数。此外,任何有关访问子页面上的DOM元素的技巧都将不胜感激。
谢谢你的帮助!
(抱歉,我是个新手,而且还不熟悉编程,而且这是我第一次编写Greasemonkey脚本)
发布于 2010-12-16 12:31:53
发布的代码片段是不充分的,并且与“按下页面上的按钮即可关闭窗口”的声明操作不匹配。
因此,最好的猜测是close函数在birthday() (定义winNew的地方)之外,或者未显示的代码中的某些东西导致了问题。
另一个警告是,您需要知道Greasemonkey脚本也可能在子窗口上触发--这取决于打开子窗口时是否指定了URL /指定了什么URL。
下面的示例代码可以在按下按钮时打开和关闭一个子窗口:
See it in action at jsfiddle。
<html>
<head>
<script type="text/javascript">
var chldWnd;
function OpenChldWin ()
{
//chldWnd = window.open ("http://www.google.com");
chldWnd = window.open ('','','height=200, width=200');
chldWnd.document.write ('<p>My New Window</p>'); //-- Don't do if opening a URL in new window.
chldWnd.focus();
}
function CloseChldWin ()
{
if (chldWnd.closed)
alert ('Child window was already closed.');
else
{
chldWnd.close ();
alert ('Child window is NOW closed.');
}
}
</script>
</head>
<body>
<input type="button" value="Open Child Window" onclick="OpenChldWin ()">
<input type="button" value="Close the Child Window" onclick="CloseChldWin ()">
</body>
</html>https://stackoverflow.com/questions/4448973
复制相似问题