白左
千年狐狸
千年狐狸
  • UID34985
  • 注册日期2010-12-29
  • 最后登录2019-05-10
  • 发帖数2009
  • 经验617枚
  • 威望0点
  • 贡献值340点
  • 好评度65点
  • 社区居民
  • 忠实会员
阅读:1450回复:4

【已解决】油猴脚本:打开一个同源新标签然后关闭

楼主#
更多 发布于:2017-08-27 11:10
对某个网站有需求:点击按钮或者打开主页时自动在新标签打开某个同源url(例如网站为www.A.com, 打开www.A.com/B.html),然后关闭这个标签
想写一个油猴脚本完成,但是



1. 在@grant  none的情况下,使用let tab = window.open(url),无反应,没有新标签打开
2. 在@grant GM_openInTab的情况下,使用let tab = GM_openInTab(url)可以打开新标签,但是返回tab为null,无法关闭
3. 使用插入<script>方法,提示HierarchyRequestError: Node cannot be inserted at the specified point in the hierarchy,无新标签打开


那么, 这个功能要怎么实现?能否实现?
-いたんですか? -ええ、ずっと
yfdyh000
千年狐狸
千年狐狸
  • UID29079
  • 注册日期2009-06-07
  • 最后登录2019-12-13
  • 发帖数2235
  • 经验1367枚
  • 威望0点
  • 贡献值52点
  • 好评度137点
  • 社区居民
  • 最爱沙发
  • 忠实会员
1楼#
发布于:2017-08-27 11:28
1. 可能弹出窗口阻止器拦截了(以及你禁用了通知?),非用户事件绑定则Firefox很容易拦截。网上搜索可找一些文章,有一些方法。比如 http://itindex.net/detail/52877-window.open-%E6%B5%8F%E8%A7%88%E5%99%A8
2. 看 https://wiki.greasespot.net/GM_openInTab ,未定义可能是正常情况/设计预期

如果是自用,可以 about:config 中启用 dom.allow_scripts_to_close_windows,可以关闭非子窗口。
白左
千年狐狸
千年狐狸
  • UID34985
  • 注册日期2010-12-29
  • 最后登录2019-05-10
  • 发帖数2009
  • 经验617枚
  • 威望0点
  • 贡献值340点
  • 好评度65点
  • 社区居民
  • 忠实会员
2楼#
发布于:2017-08-28 17:30
yfdyh000:1. 可能弹出窗口阻止器拦截了(以及你禁用了通知?),非用户事件绑定则Firefox很容易拦截。网上搜索可找一些文章,有一些方法。比如 http://itindex.net/detail/52877-window.open-%E6%B5%8...回到原帖
感谢dalao指点!没想到竟然是阻止弹窗这个功能引起的,因为不管是控制台还是浏览器控制台,都没看见任何记录,还以为是web api本身的限制

直接允许script关闭其他tab似乎权限太大了点,不过经测试,在选项>隐私与安全>权限>拦截弹出式窗口里把需要脚本运行的网站A加入运行列表也能够成功打开标签,这样的话就仅限于网站A,比较安全


这个好像和禁用通知无关,因为地址栏左上角没看见和通知相关的图标,印象中如果禁用的话,会出现一个图标,点击可以再次允许


加入弹窗白名单后已经可以实现OP中的需求,唯一的缺点是打开的标签总是前台的,查了下似乎JS并不允许更改标签的前后台打开行为;而油猴内置的GM_openInTab则是后台打开的,因为他返回是null,说不定就是用你连接中a.click()的方法实现的……
-いたんですか? -ええ、ずっと
yfdyh000
千年狐狸
千年狐狸
  • UID29079
  • 注册日期2009-06-07
  • 最后登录2019-12-13
  • 发帖数2235
  • 经验1367枚
  • 威望0点
  • 贡献值52点
  • 好评度137点
  • 社区居民
  • 最爱沙发
  • 忠实会员
3楼#
发布于:2017-08-29 08:17
白左:感谢dalao指点!没想到竟然是阻止弹窗这个功能引起的,因为不管是控制台还是浏览器控制台,都没看见任何记录,还以为是web api本身的限制

直接允许script关闭其他tab似乎权限太大了点,不过经测试,在选项>隐私与安全>权限>拦...
回到原帖
默认是有弹出通知,在工具栏下方。
dom.allow_scripts_to_close_windows 是允许脚本用window.close()关闭自身,不确定能否关闭其他窗口。因为开发者预期浏览器不会允许这样做,所以访问绝大多数网站都不会有问题。
白左
千年狐狸
千年狐狸
  • UID34985
  • 注册日期2010-12-29
  • 最后登录2019-05-10
  • 发帖数2009
  • 经验617枚
  • 威望0点
  • 贡献值340点
  • 好评度65点
  • 社区居民
  • 忠实会员
4楼#
发布于:2017-08-30 15:22
yfdyh000:默认是有弹出通知,在工具栏下方。
dom.allow_scripts_to_close_windows 是允许脚本用window.close()关闭自身,不确定能否关闭其他窗口。因为开发者预期浏览器不会允许这样做,所以访问绝大多数网站都不会...
回到原帖
哦哦, 是我理解错了, 还以为tab A的脚本可以无条件关闭tab B呢, 那就牛逼了...
-いたんですか? -ええ、ずっと
游客

返回顶部