js实现网页内自定义粘贴板

js实现网页内自定义粘贴板,第1张

  很酷吧,相信经常在网上复制粘贴的人应该不陌生,我也是经历过,觉得很神奇,所以就寻思着是不是也在自己的博客里面也实现这个功能,经过一番查资料于研究,我总算弄明白了其中的原委,并实际应用于我的博客,你可以复制我粘贴试试,觉得酷的话就可以往下接着看了!下面来看一下实现过程。这里说明一下,浏览器版本较低的话可能`addEventListener()`不支持,特别是IE浏览器,IE8以前包括IE8的版本都不支持此方法。

    当用户选中某段内容时windowgetSelection()获取一个Selection对象,将这个`objSelectiontostring()`,就是选中区的内容,这里可以用` var selectionString = windowgetSelection()toString()`在控制台查看,能在控制台查看说明我们就可以通过js获取到,selectionString + '自定义内容',到这里复制的原内容我们就有了。这里我们要创建一个DOM容器来存`objSelectiontostring()`,最好是可以换行的,如p、div、textarea等。

  当一个HTML文档切换到设计模式时,document暴露 execCommand 方法,该方法允许运行命令来 *** 纵可编辑内容区域的元素,这里主要用其中的copy命令来实现复制功能,听说插件Clipboardjs也是调用这个方法实现复制功能的`bool = documentexecCommand(aCommandName, aShowDefaultUI, aValueArgument)`,第一个参数是命令的名称,字符串类型,后两个参数我们可以不用,返回bool值,如果是 false则表示 *** 作不被支持或未被启用命令只介绍用到的copy命令:

  > copy:拷贝当前选中内容到剪贴板。启用这个功能的条件因浏览器不同而不同,而且不同时期,其启用条件也不尽相同。使用之前请检查浏览器兼容表,以确定是否可用。

  这是很重要的一步,这是复制内容的关键命令。这里我们只需要在正确的时间执行`documentexecCommand('copy')`即可。

  addEventListener()方法用于向指定元素添加事件句柄,这里我就抛开文档,就针对本次功能对这个HTML DOM方法进行通俗的解释了,这里主要用来规定我们自定义复制功能的有效DOM范围,来个例子:

  //body中有<div id="test">content</div>

  var el = documentgetElementById('test');

  eladdEventListener('copy', function (e){

    // 触发copy事件后的处理

  }

  这个例子中我们实现的功能将只在id为test的DOM元素里有效,其它地方将恢复默认复制功能。

    Range表示包含节点和部分文本节点的文档片段。用`var range = documentcreateRange()`方法创建,这里面为什么要创建Range呢,主要是用来存储Selection对象的开始位置和终点位置,因为我们是要阻止默认的copy事件,让copy的内容是用户选中的内容加上我们自定义的内容,再将这个内容放入粘贴板,形成最终的粘贴内容。`documentcreateRange`得到是还没有放内容的片段,我们我们还会用到`RangesetStart()`设置Range的起点和`RangesetEnd()`设置Range的终点。最终`selectionObjremoveAllRanges()`将selectionObj中的默认Range 去掉,`selectionObjaddRange(range)`,粘贴板就有了,不出意外去粘贴就会有选中的内容加自定义的内容了。

源码可以联系作者。这里有个特别注意的点,如果是原生js的话直接调用函数就可以,如果是vuejs的话中可以看到,我是在mounted()钩子函数里调用,而不是在created()钩子函数里调用,这里一定不能在created()钩子函数里调用,为什么呢?

因为created()执行的时候一般是在html渲染前的 *** 作,此时el还是undefined,所以执行getElementById()就会报错,created()适合做html渲染前的数据初始化工作。而mounted()一般是在html渲染完成后的 *** 作,此时el,data都已经加载完成,一般对dom的 *** 作都写在mounted中,这是个要注意的点,喜欢的话就给作者点个心,谢谢

<script language="javascript">

var win;

function OpenWindow

{

win=windowopen("testhtm","test","");

}

function CheckWindow()

{

if(win!=null)

{

如果存在,则调用testhtm中的一个方法

}

else

{

如果不存在,则重新open testhtm,并调用testhtm中的那个方法

OpenWindow();//如果不存在,则重新open testhtm

}

}

</script>

To:top1

那就没办法啦因为只子窗口打开后只能在父窗口监测

首先需要让这两个页面之间建立有关系,也就是需要在一个页面中打开另外一个页面,可以参考以下代码:

主窗口代码:

var features = {

                channelmode: 1,

                fullscreen: 1,

                location: 0,

                menubar: 0,

                scrollbars: 0,

                status: 0,

                titlebar: 0,

                toolbar: 0,

                resizable: 1

            };

var previewWin = windowopen("previewhtml", "展示", features, true);

在主窗口中可以通过previewWin对象来调用子窗口中的代码。

在子窗口中可以通过opener对象来访问主窗口中的代码,这样主从窗口之间就建立关系了,如果你需要在主窗口中改变子窗口中的背景可以这样做:

首先在子窗口中定义一个改变窗口背景的函数,比如 changeBg(),然后在主窗口中通过previewWin对象调用,previewWinchangeBg()即可。

下面是示例代码,带注释,请仔细阅读:

1、 父窗口 A

<head>

<!-- 引入 artDialog 文件 -->

<link href="/skins/defaultcss" rel="stylesheet" />

<script src="/artDialogminjs"></script>

<script>

// 全局变量,保存d窗窗口句柄

var dialog;

// 定义 d出窗口 *** 作 函数

windowmyDialog = function(){

    // 如果之前有已经打开的d窗,则先将其关闭。

    if (dialog) dialogclose();

    // d出窗口

    dialog = artdialog({

        title: '登录',

        content: '密码:<input id="login-pw" type="text" value="" />'

            + '<iframe src="C"><\/iframe>',

        lock: true,

        fixed: true,

        ok: topcloseMyDialog, // 处理窗口关闭 *** 作

        okValue: '登录',

        cancel: function () {}

    });

}

// 定义 关闭窗口 *** 作 函数

windowcloseMyDialog = function(){

    // 处理d出窗口的内容

    alert(documentgetElementById('login-pw')value);

    // 关闭窗口

    dialogclose();

    // 改变 iframe 框架指向

    frames[0]locationhref = 'anywhere_u_wanthtm';

}

</script>

</head>

<body>

<!-- iframe 框架结构 -->

<iframe src="B"></iframe>

2、 Iframe 窗口 B (在 A 中)

<input type="button" onclick="topmyDialog();" value="d出窗口" />

3、 其实上面两个的结构应该足够使用了。但如果你非要在 C 窗口中 *** 作,那么 C 中的按钮可以这样:

<input type="button" onclick="topcloseMyDialog();" value="关闭" />

=====

总结:

其实说穿了,就是通过 top 对象来获取顶层窗口,进行对应的 *** 作。通过 frames 来对子框架进行 *** 作。

以上,请采纳,请给分。

以上就是关于js实现网页内自定义粘贴板全部的内容,包括:js实现网页内自定义粘贴板、js 如何判断一个已打开的页面是否存在、如何把这个页面的js参数传递给另一个等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10095683.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存