ffpro
火狐狸
火狐狸
  • UID35340
  • 注册日期2011-02-26
  • 最后登录2018-07-18
  • 发帖数289
  • 经验45枚
  • 威望0点
  • 贡献值16点
  • 好评度1点
  • 社区居民
阅读:4790回复:15

能否帮忙修改一下这个纵横中文网的下载脚本

楼主#
更多 发布于:2013-06-01 13:22
脚本如下
(function() {
        if(unsafeWindow.user) {
                var wbutton = document.querySelector('.wbutton');
                var a = document.createElement('a');
                a.className = 'new_plview';
                a.innerHTML = '下载本书';
                a.addEventListener('click', function(){
                     var title = document.querySelector('.wright>h1>a').title
                     GM_setClipboard(title);
                     },0);
                a.href = 'http://dl.zongheng.com/book/' + document.body.getAttribute('bookId') + '.txt';
                wbutton.appendChild(a);
        }
})();


这个脚本的作用是在书籍介绍页面加入一个和纵横按钮样式一样的下载按钮

图片:1.PNG



但是现在纵横已经改版了,他们自己加入了下载按钮

图片:2.PNG



可是问题在于,以http://book.zongheng.com/book/126081.html 这本书为例,
纵横自带的下载按钮指向的是
http://dl.zongheng.com/book/126081.zip,zip文件里面的小说也是数字命名,这样的话下载的时候改名就不方便

我希望请各位可以用脚本,将下载按钮的指向改为http://dl.zongheng.com/book/126081.txt 这样的效果,有劳各位,谢谢
a936468
小狐狸
小狐狸
  • UID33570
  • 注册日期2010-07-29
  • 最后登录2013-07-08
  • 发帖数20
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
1楼#
发布于:2013-06-01 13:22
用这个试试:
(function (jQuery, Domain) {
    var $download = jQuery(".download");
    var bookId = $download.attr("bookId") || jQuery("body").attr("bookId");
    var uri = Domain.dlHostName + "/book/" + bookId + ".txt";
    var btn = jQuery('<a class="button" href="' + uri + ' " download="' + jQuery("body").attr("bookName") + '">下载本书</a>');
    $download.replaceWith(btn);
    $download = null;
})(unsafeWindow.jQuery, unsafeWindow.Domain);

    [*]Bitbucket: https://bitbucket.org/zbinlin[/*:m]
    [*]Blog: http://blog.mozcp.com[/*:m][/list:u]
ffpro
火狐狸
火狐狸
  • UID35340
  • 注册日期2011-02-26
  • 最后登录2018-07-18
  • 发帖数289
  • 经验45枚
  • 威望0点
  • 贡献值16点
  • 好评度1点
  • 社区居民
2楼#
发布于:2013-06-01 13:22
有效,多谢!!!
ffpro
火狐狸
火狐狸
  • UID35340
  • 注册日期2011-02-26
  • 最后登录2018-07-18
  • 发帖数289
  • 经验45枚
  • 威望0点
  • 贡献值16点
  • 好评度1点
  • 社区居民
3楼#
发布于:2013-06-01 13:22
a936468:用这个试试:
(function (jQuery, Domain) {
    var $download = jQuery(".download");
    var bookId = $download.attr("bookId") || jQuery("body").attr("bookId");
    var uri = Domain.dlHostName + "/book/" + bookId + ".txt";
    var btn = jQuery('<a class="button" href="' + uri + ' " download="' + jQuery("body").attr("bookName") + '">下载本书</a>');
    $download.replaceWith(btn);
    $download = null;
})(unsafeWindow.jQuery, unsafeWindow.Domain);
回到原帖


你好,使用过程中发现一个问题,原脚本事实上用了GM_setClipboard 这个函数,也就是
a.addEventListener('click', function(){
                     var title = document.querySelector('.wright>h1>a').title
                     GM_setClipboard(title);
                     },0);


这段代码的作用应该是使得此按钮被触发的同时还能够将小说介绍页上的小说名称复制到了剪贴板,这样下载的时候就可以直接ctrl+v重命名了,不知道能否请你再你的这个脚本中也加入此功能呢?
a936468
小狐狸
小狐狸
  • UID33570
  • 注册日期2010-07-29
  • 最后登录2013-07-08
  • 发帖数20
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
4楼#
发布于:2013-06-01 13:22
ffpro

你好,使用过程中发现一个问题,原脚本事实上用了GM_setClipboard 这个函数,也就是
a.addEventListener('click', function(){
                     var title = document.querySelector('.wright>h1>a').title
                     GM_setClipboard(title);
                     },0);


这段代码的作用应该是使得此按钮被触发的同时还能够将小说介绍页上的小说名称复制到了剪贴板,这样下载的时候就可以直接ctrl+v重命名了,不知道能否请你再你的这个脚本中也加入此功能呢?
回到原帖


在 $download = null; 后面添加以下代码:
btn.click(function () {
    GM_setClipboard(this.download);
});

    [*]Bitbucket: https://bitbucket.org/zbinlin[/*:m]
    [*]Blog: http://blog.mozcp.com[/*:m][/list:u]
ffpro
火狐狸
火狐狸
  • UID35340
  • 注册日期2011-02-26
  • 最后登录2018-07-18
  • 发帖数289
  • 经验45枚
  • 威望0点
  • 贡献值16点
  • 好评度1点
  • 社区居民
5楼#
发布于:2013-06-01 13:22
你好,测试失败,而且即便按照
https://github.com/scriptish/scriptish/ ... tClipboard
这里的介绍,调整为
btn.click(function () {
    GM_setClipboard(‘hello’);
});

也不会对剪贴板造成改变

当前完整脚本如下
(function (jQuery, Domain) {
    var $download = jQuery(".download");
    var bookId = $download.attr("bookId") || jQuery("body").attr("bookId");
    var uri = Domain.dlHostName + "/book/" + bookId + ".txt";
    var btn = jQuery('<a class="button" href="' + uri + ' " download="' + jQuery("body").attr("bookName") + '">下载本书</a>');
    $download.replaceWith(btn);
    $download = null;
    btn.click(function () {
    GM_setClipboard(this.download);
});
})(unsafeWindow.jQuery, unsafeWindow.Domain);


找到错误控制台,发现错误信息如下

错误: Scriptish 访问冲突:unsafeWindow 无法调用: GM_setClipboard



附上一个在起点能够正常使用的脚本
// ==UserScript==
    // @name           起点下载
    // @namespace      qidiantxt
    // @include        http://www.qidian.com/Book/*
    // ==/UserScript==
    var link = document.location.pathname.match(/\d+/)
    tab = document.querySelector('.tabs ul');
    newtab = document.createElement('li');
	newtab.addEventListener('click', function(){
                      var title = document.querySelector('.title h1').textContent
					  title = title.trim();
                      GM_setClipboard(title);
                      },0);
    newtab.innerHTML='<a href="http://download.qidian.com/pda/' + link + '.txt">下载TXT</a>';
    tab.appendChild(newtab);


以http://www.qidian.com/Book/1307256.aspx 为例,正常复制,且不会弹出此提示
hzzhaiqi
火狐狸
火狐狸
  • UID30112
  • 注册日期2009-08-18
  • 最后登录2015-09-15
  • 发帖数279
  • 经验180枚
  • 威望1点
  • 贡献值44点
  • 好评度28点
6楼#
发布于:2013-06-01 13:22
ffpro:你好,测试失败,而且即便按照
https://github.com/scriptish/scriptish/ ... tClipboard
这里的介绍,调整为
btn.click(function () {
    GM_setClipboard(‘hello’);
});

也不会对剪贴板造成改变

当前完整脚本如下
(function (jQuery, Domain) {
    var $download = jQuery(".download");
    var bookId = $download.attr("bookId") || jQuery("body").attr("bookId");
    var uri = Domain.dlHostName + "/book/" + bookId + ".txt";
    var btn = jQuery('<a class="button" href="' + uri + ' " download="' + jQuery("body").attr("bookName") + '">下载本书</a>');
    $download.replaceWith(btn);
    $download = null;
    btn.click(function () {
    GM_setClipboard(this.download);
});
})(unsafeWindow.jQuery, unsafeWindow.Domain);


找到错误控制台,发现错误信息如下

错误: Scriptish 访问冲突:unsafeWindow 无法调用: GM_setClipboard



附上一个在起点能够正常使用的脚本
// ==UserScript==
    // @name           起点下载
    // @namespace      qidiantxt
    // @include        http://www.qidian.com/Book/*
    // ==/UserScript==
    var link = document.location.pathname.match(/\d+/)
    tab = document.querySelector('.tabs ul');
    newtab = document.createElement('li');
	newtab.addEventListener('click', function(){
                      var title = document.querySelector('.title h1').textContent
					  title = title.trim();
                      GM_setClipboard(title);
                      },0);
    newtab.innerHTML='<a href="http://download.qidian.com/pda/' + link + '.txt">下载TXT</a>';
    tab.appendChild(newtab);


以http://www.qidian.com/Book/1307256.aspx 为例,正常复制,且不会弹出此提示
回到原帖


GM_setClipboard 为 Scriptish 特有,Greasemonkey 没用。你这个要加 setTimeout,下面这个试试
btn.click(function () {
	setTimeout(function(self){
		GM_setClipboard(self.download);
	}, 0, this);
}
ffpro
火狐狸
火狐狸
  • UID35340
  • 注册日期2011-02-26
  • 最后登录2018-07-18
  • 发帖数289
  • 经验45枚
  • 威望0点
  • 贡献值16点
  • 好评度1点
  • 社区居民
7楼#
发布于:2013-06-01 13:22
hzzhaiqi

GM_setClipboard 为 Scriptish 特有,Greasemonkey 没用。你这个要加 setTimeout,下面这个试试
btn.click(function () {
	setTimeout(function(self){
		GM_setClipboard(self.download);
	}, 0, this);
}
回到原帖



我是使用的Scriptish,你这段代码不会报那个错误,可以操作剪贴板,可是效果变成了清空剪贴板(内容变为空白)

另外,括号有点不对,你应该是这个意思吧
btn.click(function () {
    setTimeout(function(self){
      GM_setClipboard(self.download);
   }, 0, this);
});


是不是应该用addEventListener配合GM_setClipboard这个靠谱些?毕竟这个经过起点和纵横原来版本的测试
hzzhaiqi
火狐狸
火狐狸
  • UID30112
  • 注册日期2009-08-18
  • 最后登录2015-09-15
  • 发帖数279
  • 经验180枚
  • 威望1点
  • 贡献值44点
  • 好评度28点
8楼#
发布于:2013-06-01 13:22



我是使用的Scriptish,你这段代码不会报那个错误,可以操作剪贴板,可是效果变成了清空剪贴板(内容变为空白)

另外,括号有点不对,你应该是这个意思吧
btn.click(function () {
    setTimeout(function(self){
      GM_setClipboard(self.download);
   }, 0, this);
});


是不是应该用addEventListener配合GM_setClipboard这个靠谱些?毕竟这个经过起点和纵横原来版本的测试


上面的有误,我被你误导,没仔细看。
btn.addEventListener("click", function () {
    setTimeout(function(self){
      GM_setClipboard(self.download);
   }, 0, this);
});
ffpro
火狐狸
火狐狸
  • UID35340
  • 注册日期2011-02-26
  • 最后登录2018-07-18
  • 发帖数289
  • 经验45枚
  • 威望0点
  • 贡献值16点
  • 好评度1点
  • 社区居民
9楼#
发布于:2013-06-01 13:22
提示错误:
错误:TypeError: btn.addEventListener is not a function

当前的脚本为:
// ==UserScript==
// @id             Zongheng_Download
// @name           Zongheng_download
// @version        1.0
// @namespace      
// @author         firefox
// @description    
// @include        http://book.zongheng.com/book/*
// @run-at         document-end
// ==/UserScript==
(function (jQuery, Domain) {
    var $download = jQuery(".download");
    var bookId = $download.attr("bookId") || jQuery("body").attr("bookId");
    var uri = Domain.dlHostName + "/book/" + bookId + ".txt";
    var btn = jQuery('<a class="button" href="' + uri + ' " download="' + jQuery("body").attr("bookName") + '">下载本书</a>');
    $download.replaceWith(btn);
    $download = null;
    btn.addEventListener("click", function () {
    setTimeout(function(self){
      GM_setClipboard(self.download);
   }, 0, this);
});
})(unsafeWindow.jQuery, unsafeWindow.Domain);


谢谢hzzhaiqi,能请你再看看吗?
hzzhaiqi
火狐狸
火狐狸
  • UID30112
  • 注册日期2009-08-18
  • 最后登录2015-09-15
  • 发帖数279
  • 经验180枚
  • 威望1点
  • 贡献值44点
  • 好评度28点
10楼#
发布于:2013-06-01 13:22
下面这样对的,我测试成功,要 Scriptish
(function (jQuery, Domain) {
    var $download = jQuery(".download");
    var bookId = $download.attr("bookId") || jQuery("body").attr("bookId");
    var uri = Domain.dlHostName + "/book/" + bookId + ".txt";
    var btn = jQuery(	'<a class="button" href="' + uri + ' " download="' + jQuery("body").attr("bookName") + '">下载本书</a>');
    $download.replaceWith(btn);
    $download = null;
    btn.click(function () {
    	setTimeout(function(self){
    		GM_setClipboard(self.download);
    	}, 0, this);
	});
})(unsafeWindow.jQuery, unsafeWindow.Domain);
ffpro
火狐狸
火狐狸
  • UID35340
  • 注册日期2011-02-26
  • 最后登录2018-07-18
  • 发帖数289
  • 经验45枚
  • 威望0点
  • 贡献值16点
  • 好评度1点
  • 社区居民
11楼#
发布于:2013-06-01 13:22
hzzhaiqi:下面这样对的,我测试成功,要 Scriptish
(function (jQuery, Domain) {
    var $download = jQuery(".download");
    var bookId = $download.attr("bookId") || jQuery("body").attr("bookId");
    var uri = Domain.dlHostName + "/book/" + bookId + ".txt";
    var btn = jQuery(	'<a class="button" href="' + uri + ' " download="' + jQuery("body").attr("bookName") + '">下载本书</a>');
    $download.replaceWith(btn);
    $download = null;
    btn.click(function () {
    	setTimeout(function(self){
    		GM_setClipboard(self.download);
    	}, 0, this);
	});
})(unsafeWindow.jQuery, unsafeWindow.Domain);
回到原帖


谢谢,不过我这里还是没有成功,很奇怪啊,我用的也是Scriptish,而且上面那个起点中文网的下载脚本同样用的GM_setClipboard,目前在我这里仍然工作正常。

我说一下我这里的问题,下载本书打开的不是zip是txt,这个成功了。
在点击之前,随便复制一段文字,测试脚本剪贴板操作是否成功。测试发现,函数操作是成功的,剪贴板里面之前复制的文字在点击这个“下载”按钮后不见了。
但是问题是:按ctrl+v粘贴出来的东西是空白,剪贴板相当于被清空了

这是什么问题,有没有哪位也能够将上面的脚本测试一下看看
hzzhaiqi
火狐狸
火狐狸
  • UID30112
  • 注册日期2009-08-18
  • 最后登录2015-09-15
  • 发帖数279
  • 经验180枚
  • 威望1点
  • 贡献值44点
  • 好评度28点
12楼#
发布于:2013-06-01 13:22
帮不了你,我反复测试没有问题,可以粘贴标题。
a936468
小狐狸
小狐狸
  • UID33570
  • 注册日期2010-07-29
  • 最后登录2013-07-08
  • 发帖数20
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
13楼#
发布于:2013-06-01 13:22
用这个试试:
(function (jQuery, Domain) {
    var $download = jQuery(".download");
    var bookId = $download.attr("bookId") || jQuery("body").attr("bookId");
    var bookName = jQuery("body").attr("bookName");
    var uri = Domain.dlHostName + "/book/" + bookId + ".txt";
    var $btn = jQuery('<a class="button" href="' + uri + ' " download="' + bookName + '">下载本书</a>');
    $download.replaceWith($btn);
    $download = null;
    $btn[0].addEventListener("click", function () {
        GM_setClipboard(bookName);
    }, false);
})(unsafeWindow.jQuery, unsafeWindow.Domain);

    [*]Bitbucket: https://bitbucket.org/zbinlin[/*:m]
    [*]Blog: http://blog.mozcp.com[/*:m][/list:u]
ffpro
火狐狸
火狐狸
  • UID35340
  • 注册日期2011-02-26
  • 最后登录2018-07-18
  • 发帖数289
  • 经验45枚
  • 威望0点
  • 贡献值16点
  • 好评度1点
  • 社区居民
14楼#
发布于:2013-06-01 13:22
a936468:用这个试试:
(function (jQuery, Domain) {
    var $download = jQuery(".download");
    var bookId = $download.attr("bookId") || jQuery("body").attr("bookId");
    var bookName = jQuery("body").attr("bookName");
    var uri = Domain.dlHostName + "/book/" + bookId + ".txt";
    var $btn = jQuery('<a class="button" href="' + uri + ' " download="' + bookName + '">下载本书</a>');
    $download.replaceWith($btn);
    $download = null;
    $btn[0].addEventListener("click", function () {
        GM_setClipboard(bookName);
    }, false);
})(unsafeWindow.jQuery, unsafeWindow.Domain);
回到原帖


非常感谢,这个有效!!!
上一页
游客

返回顶部