修改书签以使用剪贴板中的相同副本来处理剪贴板内容并填写表单

Revise bookmarklet to use the same copy from clipboard to process the clipboard contents and fill form

本文关键字:剪贴板 处理 本来 表单 副本 书签 修改      更新时间:2023-09-26

我找到了两个书友,它们可以从剪贴板中获取格式化文本并在另一页上填写表单。这甚至可以跨域和跨浏览器工作。 问题是书签"B"不能填写与"A"相同的表单。

留下书签"

A"的唯一真正问题是它粘贴了剪贴板收件箱,书签"B"不必显示,但在必要时会回退。

测试这些书友的好页面:google.com/advanced_search

书签"A"来源:http://wundes.com/bookmarklets.html(顺便说一句,它确实可以在IE中工作,尽管页面说它不会。

javascript:function%20repop(){var%20j,A="",D,E,F=document.forms,G="",div="~::~",H,FA=[],TA=[],DF=[],DA=[];H=prompt("Paste-Form-Vars-Here","");K=H.split("~jdiv~");while(K.length>0){var%20L=K.shift().split(div);mypush(L,FA);}var%20alen=FA.length;for(var%20c=0;c<alen;c++){TA[c]=[];addtypes(FA[c],TA[c]);}for(all%20in%20FA){addObj(FA[all],TA[all]);}for(var%20eff%20in%20TA){for(var%20o%20in%20TA[eff]){for(var%20i%20in%20TA[eff][o].objArr){var%20fl=F[eff].length;for(var%20df=0;df<fl;df++){var%20dff=F[eff][df];var%20taf=TA[eff][o].objArr[i];if(dff.name==taf[1]){if(taf[2].length==0||taf[2].length==undefined){taf[2]="";}dff.value=taf[2];}}}}}}repop();void(null);function%20addObj(obj,ElArr){for(i%20in%20obj){for(var%20e%20in%20ElArr){if(obj[i][0]==ElArr[e].name){ElArr[e].objArr.push(obj[i]);break;}}}}function%20mypush(a,Ar){var%20n=a.shift();if(Ar[n]==undefined){Ar[n]=[];}Ar[n].push(a);}function%20addtypes(a,Ar){for(var%20e%20in%20a){var%20t=a[e][0];if(elemIndexOf(t,Ar)==-1){var%20bob=new%20Elemental(t,[]);Ar.push(bob);}}}function%20elemIndexOf(s,a){var%20ln=a.length;for(var%20x=0;x<ln;x++){if(a[x].name==s){return(x);}}return(-1);}function%20Elemental(name,objArr){this.name=name;this.objArr=objArr;}

它期望的剪贴板内容需要如下所示: 0~::~text~::~jdiv~0~::~text~::~as_eq~::~If you see this the bookmarklet worked!~jdiv~

书签"B" 来源: https://github.com/cvuorinen/my-bookmarklets/tree/master/form-populate

javascript:(function(){t='';c=window.clipboardData;if(c){t=c.getData('Text');}if(!t){t=window.prompt('Paste:');}p=t.split('|');t=p.shift();t=t.split(';');v=t[0].split(':');f=t[1].split(':');l=v.length;d=((f.length>l+1)?'window.'+f[l+1]+'.':'')+'document.'+f[l]+'.';for(i=0;i<l;i++){eval(d+f[i]).value=v[i];}p=p.join('|');if(c){c.setData('Text',p);}else if(p){window.prompt('Copy:',p);}})();

它期望的剪贴板内容需要如下所示:

If you see this the bookmarklet worked!;as_eq:f

老实说,我不懂javascript,我花了50多个小时试图研究一种在没有Web服务器的情况下跨域传输表单数据的方法。

使我的页面1(由我控制生成剪贴板)问题很容易使第二页尽可能易于使用。

我真的认为这是可以做到的,但不确定如何修改书友"A"以像"B"对剪贴板的副本一样行事。 如果我必须忍受"A",我会没事的,但如果我可以避免 ctrl-v 步骤并使其成为双击解决方案,我的最终解决方案会好得多。

提前感谢任何帮助。

更新:4 年 14 月 16 日 使用 IE 开发人员工具后,我找到了罪魁祸首。 它与 t 变量有关。

'

javascript:function%20repop(){var%20j,A=",t,D,E,F=document.forms,G=",div="~::~",H,FA=[],TA=[],DF=[],DA=[],c;%20%20c=window.clipboardData;%20%20if%20(c)%20{%20%20%20%20H=c.getData('Text');}K=H.split("~jdiv~");while(K.length>0){var%20L=K.shift().split(div);mypush(L,FA);}var%20alen=FA.length;for(var%20c=0;c

只要您在剪贴板上已经以原始副本书签的格式制作表单内容(请参阅前面提到的书签 A 源中查看更多信息),那么此修订后的书签将填充它。

最初的书签开发人员提供了以下内容。 似乎它仅适用于某些IE版本。 希望这有助于需要此表单填写功能的人。

javascript:function%20repop(){var%20j,A="",D,E,F=document.forms,G="",div="~::~",H,FA=[],TA=[],DF=[],DA=[],c;%20%20c=window.clipboardData;wait(3000);%20%20if%20(c)%20{%20%20%20%20H=c.getData('Text');%20%20}%20%20%20%20if%20(!t)%20%20{%20%20%20%20H=window.prompt('Paste:');%20%20}K=H.split("~jdiv~");while(K.length>0){var%20L=K.shift().split(div);mypush(L,FA);}var%20alen=FA.length;for(var%20c=0;c<alen;c++){TA[c]=[];addtypes(FA[c],TA[c]);}for(all%20in%20FA){addObj(FA[all],TA[all]);}for(var%20eff%20in%20TA){for(var%20o%20in%20TA[eff]){for(var%20i%20in%20TA[eff][o].objArr){var%20fl=F[eff].length;for(var%20df=0;df<fl;df++){var%20dff=F[eff][df];var%20taf=TA[eff][o].objArr[i];if(dff.name==taf[1]){if(taf[2].length==0||taf[2].length==undefined){taf[2]="";}dff.value=taf[2];}}}}}}repop();void(null);function%20addObj(obj,ElArr){for(i%20in%20obj){for(var%20e%20in%20ElArr){if(obj[i][0]==ElArr[e].name){ElArr[e].objArr.push(obj[i]);break;}}}}function%20mypush(a,Ar){var%20n=a.shift();if(Ar[n]==undefined){Ar[n]=[];}Ar[n].push(a);}function%20addtypes(a,Ar){for(var%20e%20in%20a){var%20t=a[e][0];if(elemIndexOf(t,Ar)==-1){var%20bob=new%20Elemental(t,[]);Ar.push(bob);}}}function%20elemIndexOf(s,a){var%20ln=a.length;for(var%20x=0;x<ln;x++){if(a[x].name==s){return(x);}}return(-1);}function%20Elemental(name,objArr){this.name=name;this.objArr=objArr;}