pingfan5888
小狐狸
小狐狸
  • UID50491
  • 注册日期2015-07-15
  • 最后登录2015-11-18
  • 发帖数20
  • 经验30枚
  • 威望0点
  • 贡献值24点
  • 好评度1点
  • 社区居民
阅读:1878回复:7

【已解决】function 函数调用问题请教,谢谢。。

楼主#
更多 发布于:2015-07-15 15:25
function  函数调用问题请教,谢谢。。
 
         CopyTitleUrl:function ()  //复制标题和链接
         {  
           title = CopyLinkNameAndURLOverlay.Copytitle(); // 函数在下面定义了  ,这行调用出错 ,如何在这调用赋值。
                        
                 var url=window.content.location.href;
                
Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper).copyString(title+'  '+url);
         }, // 返回了title 没有了 url 变量。。
      
         Copytitle:function ()   //复制过滤后的标题
 {  代码 };  
 
 出错,如果是单独调用
         CopyTitleUrl:function ()  //复制标题和链接
         {  
           CopyLinkNameAndURLOverlay.Copytitle();
 
         }
 就可以用。请问各位大大如何修改调用。。谢谢了。。
闲云潭影日悠悠。物换星移几度秋了
taoww
非常火狐
非常火狐
  • UID39284
  • 注册日期2013-03-18
  • 最后登录2024-05-09
  • 发帖数634
  • 经验580枚
  • 威望0点
  • 贡献值110点
  • 好评度104点
1楼#
发布于:2015-07-16 01:17
Components.classes早已不再暴露给页面环境。

要操作剪贴板,目前兼容性最好的方案还是用flash来干这事,就像本论坛一样。但缺点是必须要有用户的动作

如果用firefox 41+,可以用document.execCommand('copy')来做
https://developer.mozilla.org/en-US/Firefox/Releases/41#InterfacesAPIsDOM
pingfan5888
小狐狸
小狐狸
  • UID50491
  • 注册日期2015-07-15
  • 最后登录2015-11-18
  • 发帖数20
  • 经验30枚
  • 威望0点
  • 贡献值24点
  • 好评度1点
  • 社区居民
2楼#
发布于:2015-07-17 08:48
taoww:Components.classes早已不再暴露给页面环境。

要操作剪贴板,目前兼容性最好的方案还是用flash来干这事,就像本论坛一样。但缺点是必须要有用户的动作

如果用firefox 41+,可以用document.exec...
回到原帖
是为了复制标题,(过滤后的),才两个function 看起来要再次重彩代码,变大了,不然是可以的。

只是想能否做个通用的能调用。。

另外问下,能否把过滤的js代码,另存在其他的txt或JS文件中,然后,CopyTitleUrl:function ()

CopyTitleUrl:function ()

分别调用这个文件,能执行吗,谢谢 。。。
闲云潭影日悠悠。物换星移几度秋了
taoww
非常火狐
非常火狐
  • UID39284
  • 注册日期2013-03-18
  • 最后登录2024-05-09
  • 发帖数634
  • 经验580枚
  • 威望0点
  • 贡献值110点
  • 好评度104点
3楼#
发布于:2015-07-17 12:03
看样子你是在弄扩展了。你先分清楚扩展代码执行的chrome环境和页面代码执行的content环境。
title要用局部变量,window.content.location.href不见得适用于chrome环境。
var currentWindow = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser");
var currBrowser = currentWindow.getBrowser();
var currURL = currBrowser.currentURI.spec;
pingfan5888
小狐狸
小狐狸
  • UID50491
  • 注册日期2015-07-15
  • 最后登录2015-11-18
  • 发帖数20
  • 经验30枚
  • 威望0点
  • 贡献值24点
  • 好评度1点
  • 社区居民
4楼#
发布于:2015-07-17 13:21
[quote=taoww,348228]看样子你是在弄扩展了。你先分清楚扩展代码执行的chrome环境和页面代码执行的content环境。
title要用局部变量,window.content.location.href不见得适用于chrome环境。

var CopyLinkNameAndURLOverlay=
{
Init:function ()
{
var nsSS=Components.interfaces.nsISupportsString;
document.getElementById("contentAreaContextMenu").addEventListener("popupshowing",CopyLinkNameAndURLOverlay.linkPopup,true);

var oPref=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.");
var ss=Components.classes["@mozilla.org/supports-string;1"].createInstance(nsSS);
ss.data=document.getElementById("clnu-link-context").getAttribute('statustext');
oPref.setComplexValue("copylinknameandurl@livemylife.cn.description",nsSS,ss);
},

linkPopup:function ()
{
document.getElementById("clnu-link-context").hidden=(!gContextMenu.onLink);
document.getElementById("clnu-tabbar-context").hidden=(gContextMenu.onLink||gContextMenu.isTextSelected||gContextMenu.onImage||gContextMenu.onTextInput);
document.getElementById("clnu-tabbar-contexturl").hidden=(gContextMenu.onLink||gContextMenu.isTextSelected||gContextMenu.onImage||gContextMenu.onTextInput);
},
Copyhost:function ()  //复制域名
{
var location=gBrowser.webNavigation.currentURI;
var domain='';
domain=location.host;
Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper).copyString(domain);
},
CopyName:function ()  // 复制链接名称
{
var urlname=gContextMenu.linkText();
urlname=urlname.replace(/\(.*?\)/g,'');

Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper).copyString(urlname);
},
CopyTitleUrl:function ()  //复制标题和链接
{
var title=window.content.document.title;
var url=window.content.location.href;

if(url.indexOf("read.qidian.com")>0)
{
rr=url.replace('read.qidian','www.qidian');
}
else if(url.indexOf("www.qidian.com/Book/")>0)
{
rr=url.replace('www.qidian.com\/Book\/','www.qidian.com\/BookReader\/');
}

else
{
rr=url
}

Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper).copyString(title+'  '+rr);
},
Copytitle:function ()  //复制当前标题
{
var title=window.content.document.title;
pageurl=window.content.location.href;
if(pageurl.indexOf("127.0.0.1")>0)
{
r=title.split(/,.{1,20},/,1);
}
else if(pageurl.indexOf("book.zongheng.com")>0)
{
r=title.split('最新章节,',1);
// 最新章节,xx  txt全集下载,免费全文阅读-纵横中文网
}


else
{
r=title
}
Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper).copyString(r);
},
Copyurl:function ()  //复制当前网址
{
var url=window.content.location.href;
if(url.indexOf("read.qidian.com")>0)
{
rr=url.replace('read.qidian','www.qidian');
}
else if(url.indexOf("www.qidian.com/Book/")>0)
{
rr=url.replace('www.qidian.com\/Book\/','www.qidian.com\/BookReader\/');
}


else
{
rr=url
}
Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper).copyString(rr);
}
}
window.addEventListener("load",CopyLinkNameAndURLOverlay.Init,true);


在火狐上用啊。。代码如上。。
闲云潭影日悠悠。物换星移几度秋了
pingfan5888
小狐狸
小狐狸
  • UID50491
  • 注册日期2015-07-15
  • 最后登录2015-11-18
  • 发帖数20
  • 经验30枚
  • 威望0点
  • 贡献值24点
  • 好评度1点
  • 社区居民
5楼#
发布于:2015-07-17 13:26
想在
CopyTitleUrl:function ()  //复制标题和链接
{
var title=window.content.document.title;

title 能否换成调用 Copytitle:function ()  //复制当前标题   的值。
闲云潭影日悠悠。物换星移几度秋了
lonely_8
非常火狐
非常火狐
  • UID30273
  • 注册日期2009-09-03
  • 最后登录2022-08-09
  • 发帖数733
  • 经验469枚
  • 威望0点
  • 贡献值86点
  • 好评度147点
  • 社区居民
  • 忠实会员
6楼#
发布于:2015-07-17 14:44
1. “// 返回了title 没有了 url 变量。。 ”
顶楼(0楼)楼主应该是说错了吧,url和title调转了?

2. “CopyTitleUrl”内的 “title = CopyLinkNameAndURLOverlay.Copytitle();”
应该加上var ↓
var title = CopyLinkNameAndURLOverlay.Copytitle();
不然变量变成全局变量。(其它函数内也有同样的问题,例如r、rr、pageurl,应先用var关键字声明一下)

3.  由4楼的代码看。Copytitle的函数体最后一行应该加上“return r;”,
【2.】中的title才能得到返回值啊,不然只能得到undefined。
pingfan5888
小狐狸
小狐狸
  • UID50491
  • 注册日期2015-07-15
  • 最后登录2015-11-18
  • 发帖数20
  • 经验30枚
  • 威望0点
  • 贡献值24点
  • 好评度1点
  • 社区居民
7楼#
发布于:2015-07-17 22:52
lonely_8:1. “// 返回了title 没有了 url 变量。。 ”
顶楼(0楼)楼主应该是说错了吧,url和title调转了?

2. “CopyTitleUrl”内的 “title = CopyLinkNameAndURLOverlay....
回到原帖
受教了,学习到了,

现在可以了。。原来是没有声明和返回值。难怪出错不行。

万分感谢啊。
闲云潭影日悠悠。物换星移几度秋了
游客

返回顶部