Javascript实现网页水印(非图片水印)

简介:

1 概述

1.1 定义

      在一些B/S结构的应用系统中,有很多页面是需要有水印的。常见的就是公文系统、合同系统等。大家常常关注的是网站图片增加水印,而很少关注页面水印。刚去Google了一圈,关于页面水印的文章的数量为几乎为0. 本文中,流牛木马就与大家一起交流一下有关制作网页水印的心得。

    本文讨论以下的情形: 新增水印的方法需要用Javascript完成,并要求能够方便地加入到原有的页面中,不能影响到已有的功能。

1.2 预期目标

就图片水印实现方案来说,我们预期至少包括以下几个目标:

1. 实现悬浮、半透明的图片水印

2. 包含水印的页面,所有元素均为只读(不可写)

3. 在包含框架页面中,可以控制任意一个子页面或父页面的水印生成

4. 在页面放大、缩小(resize过程)后,需要在保证页面不刷新的前提下,重新生成适应页面大小的新水印,以保证所有内容都被水印覆盖,并且不会因水印图片范围过大而产生滚动条。

5. 支持IE6\7\8浏览器。暂不考虑其他浏览器。

1.3 效果图

加密前:

clip_image002

加密后:

clip_image004

可以打开附件里的文件进行查看。

2 实现步骤

2.1 基本构思

加密的过程是一个Javascript函数执行过程,所以我们首先应该考虑用Javascript操作DOM对象的方式。

在已有的HTML页面中,新建一个DOM对象在Body节点下。该对象的长、宽均经过计算,保证在覆盖全部页面内容的同时又不产生滚动条。将该对象覆盖到原有的页面之上,设置背景图,并设置为透明。

创建新DOM元素:

使用document对象里的createElement方法。创建元素后,设置它的z-index为一个大整数,保证它能够比已有网页的最大z-index大,才能完成“覆盖”。

计算新对象大小

利用三个DOM对象值: clientWidth 、scrollHeight与clientHeight.

网页中一般不会出现横向滚动条,故不使用scrollWidth.

而纵向的滚动条就很常见了。

为了保证页面内容全部覆盖,在未出现滚动条的时候,使用clientHeight,出现滚动条后,则使用scrollHeight。

设置透明

利用Alpha值。Alpha是IE支持的css filter。

2.2 应变细节

有一个小细节是很有意思的,前文也提过了,就是resize的过程。

试想,当一个页面打开的时候是550px×400px,那么自然会生成550px×400px大小的水印。但当用户对它进行最大化时,页面没有刷新,不会重新执行生成水印的函数,那么以前生产的水印图片就太小了。

如下图所示的情况。请注意,它的右侧、下侧都是没有水印的。

clip_image006

了应对这种情况,我们就需要对body的onresize()函数进行处理。如果以前定义没有onresize()函数,则直接添加onresize();如果以前有onresize()函数,则对之进行修改。

2.3 最终代码

考虑到框架页面需要考虑的情况,该方法包括三个参数: 目标页面对象、目标页面字符串、 背景图片。

function GetWaterMarked(targetObj,jpgUrl,targetStr ) {

var windowobj=targetObj;

var waterMarkPicUrl=jpgUrl;

var controlWindowStr=targetStr;

if(windowobj.document.getElementById("waterMark") != null)

return;

var m = "waterMark";

var newMark = windowobj.document.createElement("div");

newMark.id = m;

newMark.style.position = "absolute";

newMark.style.zIndex = "9527";

newMark.style.top = "0px";

newMark.style.left = "0px";

newMark.style.width = windowobj.document.body.clientWidth;

if( parseInt(windowobj.document.body.scrollHeight) > parseInt(windowobj.document.body.clientHeight) )

{

newMark.style.height = windowobj.document.body.scrollHeight;

}else

{

newMark.style.height = windowobj.document.body.clientHeight;

}

newMark.style.backgroundImage = "url("+ waterMarkPicUrl +")";

newMark.style.filter = "alpha(opacity=50)";

windowobj.document.body.appendChild(newMark);

var markStr = "var sobj ="+controlWindowStr+".document.getElementById('waterMark');sobj.style.width ="+controlWindowStr+".document.body.clientWidth;sobj.style.height ="+controlWindowStr+".document.body.clientHeight;";

if(windowobj.document.body.onresize != null)

{

var oldResiae = windowobj.document.body.onresize.toString();

var oldResiaeStr = oldResiae.substr(oldResiae.indexOf("{")+1);

var oldResiaeStr= oldResiaeStr.substr(0,oldResiaeStr.lastIndexOf("}"));

oldResiaeStr+=";"+markStr;

windowobj.document.body.onresize = new Function(oldResiaeStr);

}

else

{

windowobj.document.body.onresize = new Function(markStr);

}

}

3 原有页面处理

需要在原有的<body>标签处加入一个onload方法。如:

<body onload="GetWaterMarked(window,'watermark.jpg','this')">



本文转自 流牛木马 博客园博客,原文链接:http://www.cnblogs.com/azure/archive/2010/02/28/1675291.html,如需转载请自行联系原作者

相关文章
|
2月前
|
存储 JavaScript 前端开发
使用JavaScript构建动态交互式网页:从基础到实践
【10月更文挑战第12天】使用JavaScript构建动态交互式网页:从基础到实践
93 1
|
3月前
|
编解码 前端开发 JavaScript
javascript检测网页缩放演示代码
javascript检测网页缩放演示代码
|
3月前
|
Web App开发 JavaScript 前端开发
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
|
23天前
|
JavaScript
js实现简洁实用的网页计算器功能源码
这是一款使用js实现简洁实用的网页计算器功能源码。可实现比较基本的加减乘除四则运算功能,界面简洁实用,是一款比较基本的js运算功能源码。该源码可兼容目前最新的各类主流浏览器。
24 2
|
2月前
|
存储 JavaScript 前端开发
【JavaScript】网页交互的灵魂舞者
本文介绍了 JavaScript 的三种引入方式(行内、内部、外部)和基础语法,包括变量、数据类型、运算符、数组、函数和对象等内容。同时,文章还详细讲解了 jQuery 的基本语法和常用方法,如 `text()`、`html()`、`val()`、`attr()` 和 `css()` 等,以及如何插入和删除元素。通过示例代码和图解,帮助读者更好地理解和应用这些知识。
19 1
【JavaScript】网页交互的灵魂舞者
|
2月前
|
Web App开发 缓存 前端开发
前端RAG:使用Transformers.js手搓纯网页版RAG(二)- 基于qwen1.5-0.5B
本文继续探讨了RAG的后半部分,通过在浏览器中运行qwen1.5-0.5B模型实现了增强搜索全流程。然而,由于浏览器与模型性能限制,该方案更适合研究、离线及高隐私场景。文章提供了完整的前端代码,让读者能够动手尝试。此外,详细介绍了代码框架、知识库准备、模型初始化及问答实现等步骤,并展示了实际运行效果。受限于当前技术,除非在离线或高隐私环境下,网页大模型的应用仍需进一步优化。
|
2月前
|
存储 自然语言处理 文字识别
纯前端RAG:使用Transformers.js实现纯网页版RAG(一)
本文将分两部分教大家如何在网页中实现一个RAG系统,本文聚焦于深度搜索功能。通过浏览器端本地执行模型,可实现文本相似度计算和问答匹配,无需依赖服务器。RAG搜索基于高维向量空间,即使不完全匹配也能找到意义相近的结果。文中详细介绍了如何构建知识库、初始化配置、向量存储及相似度计算,并展示了实际应用效果。适用于列表搜索、功能导航、文档查询及表单填写等多种场景。
208 0
|
3月前
|
JavaScript 前端开发
用JavaScript编程控制网页上checkbox选择状态:全选、全部取消、反选
用JavaScript编程控制网页上checkbox选择状态:全选、全部取消、反选
|
3月前
|
JavaScript 前端开发
【原创】用JavaScript动态获取网页中缩放图片的长度、宽度和显示比例
【原创】用JavaScript动态获取网页中缩放图片的长度、宽度和显示比例
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
97 2