用户在使用PageOffice在线编辑文档的操作过程中,如果遇到一些复杂的编辑需求,可能会需要弹出一个新的对话框,做相应的处理,可能是设置一些格式,就如同Office设置字体、段落等各种对话框,也可能是填充一些内容到文档中,就如同插入书签、艺术字等各种对话框,PageOffice针对此需求提供了弹出模态和非模态两种网页对话框的方法,分别是ShowHtmlModalDialog和ShowHtmlModelessDialog,模态和非模态对话框的唯一区别就是模态对话框弹出后,用户就不能对父窗口做任何操作了,当然也就无法编辑文件,而非模态对话框就不会有这样的限制,开发人员可以根据实际需求选择使用。

在使用弹出网页对话框功能时,必须解决网页对话框与父窗口交互的几个问题,包括:

  • 父窗口给弹出的网页对话框传递参数
  • 网页对话框调用父窗口函数
  • 网页对话框给父窗口传递参数
  • 网页对话框调用父窗口函数获取返回值
  • 网页对话框调用父窗口中的PageOffice

由于ShowHtmlModalDialog和ShowHtmlModelessDialog的参数和调用方法都是完全相同的,为了简单起见,本文就以ShowHtmlModelessDialog方法为例,介绍一下弹出网页对话框的使用方法。

  1. 父窗口给弹出的网页对话框传递参数很简单,只需要在执行ShowHtmlModelessDialog方法弹出对话框的时候给第二个参数传递一个字符串,在弹出的网页对话框中使用window.external.UserParams就可以获取到这个字符串参数值。

  2. 在网页对话框中调用父窗口函数、给父窗口传递参数、获取返回值等功能,可以使用网页对话框提供的内置js函数CallParentJSFunc一起实现。

  3. 为了便于开发人员实现网页对话框与父窗口PageOffice的交互,PageOffice提供的网页对话框中的 js 对象内置引用了父窗口中的pageofficectrl对象,所以在弹出的网页对话框中直接 js 调用pageofficectrl对象就可以控制父窗口中的PageOffice和操作文档。

前端代码

  1. 父窗口的HTML代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" >
<html>
<head>
<script type="text/javascript">
var count = 0;
// 给弹出的网页对话框准备的调用函数
function updateCount(value) {
count = count + value;
document.getElementById("Text1").value = count;
return count.toString();
}
function ShowModelessDlg() {
// 弹出网页对话框,并通过第二个参数传递字符串数据:123456
pageofficectrl.ShowHtmlModelessDialog("Modeless.html", "123456", "width=560px;height=410px;");
}
function OnPageOfficeCtrlInit() {
pageofficectrl.AddCustomToolButton("弹出非模态窗口", "ShowModelessDlg()", 0);
}
</script>
</head>
<body>
<div>
js变量count=<input id="Text1" type="text" value="0"/>
</div>
<div style=" width:auto; height:95vh;">
PageOffice组件代码
</div>
</body>
</html>
  1. 弹出网页对话框Modeless.html代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Modeless</title>
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript">
// 1. 获取ShowHtmlModelessDialog方法的第二个参数的字符串值:123456
var paramStr = window.external.UserParams; function test(num){
// 2. 调用父窗口的updateCount函数,并传递参数
CallParentJSFunc({
func: "updateCount("+num+")",
success: function (strRet) {
// 调用成功,获取updateCount返回值
document.getElementById('msg').innerText = "父窗口updateCount函数返回值 :"+strRet;
}
});
} function test2(){
// 3. 直接调用pageofficectrl对象,给Word当前光标位置添加字符串文本
pageofficectrl.word.SetTextToSelection('--来自非模态对话框的文本--');
}
</script>
</head>
<body>
<h3>这是一个非模态网页对话框</h3>
<p> 此窗口弹出之后,用户仍然可以操作父窗口和编辑Word文件。</p>
<p> 父窗口执行ShowHtmlModelessDialog时传递过来的参数:<span id="span1" ></span></p>
<p> 点击下面按钮可以与父窗口进行交互操作。</p>
<ul>
<li>
通过CallParentJSFunc调用父窗口js函数updateCount:<br />
<input type="button" value="Count 加 1" onclick="test(1)" />
<span id="msg" ></span>
</li>
<li>
直接调用父窗口pageofficectrl对象:(<span style="color:red;">点击后,注意word内容变化</span>)<br />
<input type="button" value="插入文本到Word" onclick="test2()" />
</li>
</ul>
<script type="text/javascript">
document.getElementById('span1').innerText = paramStr;
</script>
</body>
</html>

参考链接:弹出网页对话框

pageoffice6 版本在线打开文件弹出网页对话框的更多相关文章

  1. JS 弹出网页 (不显示地址栏,工具栏) 网页去掉地址栏

    JS 弹出网页 (不显示地址栏,工具栏) 网页去掉地址栏 window.open()支持环境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+ 基本语法: ...

  2. JS弹出下载对话框以及实现常见文件类型的下载

    写在前面 JS要实现下载功能,一般都是这么几个过程:生成下载的URL,动态创建一个A标签,并将其href指向生成的URL,然后触发A标签的单击事件,这样就会弹出下载对话框,从而实现了一个下载的功能. ...

  3. Visual Studio2012打开时弹出“遇到异常:这可能是由某个扩展导致的”错误的解决办法

    Visual Studio2012打开时弹出"遇到异常:这可能是由某个扩展导致的"错误的解决办法: 具体问题如下: 分析原因:网上搜集了以下,出现异常的原因是安装了第三方控件,然后 ...

  4. CEfSharp下载文件 弹出保存框,实现 IDownloadHandler 接口

    上节讲了如何将CefSharp集成到C#中,但集成后将web界面链接进ChromiumWebBrowser后,但web界面上下载附件的功能不好使咯. 百度了半天还是没搞定,只能去看官网的Excampl ...

  5. 第九篇 -- 可以上网,连WIFI弹出网页

    最近在调试WIFI模块时,程序路径没走对,导致运行了其他的函数,修改了配置文件,之后每次连接WIFI时都会弹出网页,并且明明可以上网,下面电脑符号那儿还会出现黄标,甚是心烦.上网搜索一番,终是解决了. ...

  6. 由于想要实现下载的文件可以进行选择,而不是通过<a>标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载,但是ajax实现的文件下载并不能触发浏览器的下载文件弹出框,这里通过模拟表单提交实现同样的效果。

    由于想要实现下载的文件可以进行选择,而不是通过<a>标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载(这样的话ajax可以传递不同的参数),但是ajax实现的文 ...

  7. 打开Office2007弹出“向程序发送命令时出现问题” 解决方案

    打开Office2007弹出“向程序发送命令时出现问题” 解决方案,试了很多方案,最终还是这种方法帮我解决了问题,分享下,以下地址便是: http://club.excelhome.net/threa ...

  8. firefox下载文件弹出框之终极解决方案-vbs模拟键盘操作

    由于近期一直被firefox的保存文件弹出框困扰,摸索尝试过几种方法,已有的方法可以跑通但是对对效果不太满意,因此一直在寻找合适的解决办法. 最近发现了也可以通过VBS来处理弹出框,速度也不错,其原理 ...

  9. 使用CEfSharp之旅(3)下载文件 弹出保存框 IDownloadHandler

    原文:使用CEfSharp之旅(3)下载文件 弹出保存框 IDownloadHandler 版权声明:本文为博主原创文章,未经博主允许不得转载.可点击关注博主 ,不明白的进群191065815 我的群 ...

  10. [c/c++] programming之路(2)、kill QQ,弹出系统对话框,吃内存等

    一.删除文件 二.盗取密码的原理 #include<stdlib.h> //杀掉QQ,然后提示网络故障,请重新登陆,弹出高仿界面,获取账号密码,然后打开QQ进行登录 void main() ...

随机推荐

  1. #启发式合并,LIS,平衡树#洛谷 4577 [FJOI2018]领导集团问题

    题目 在一棵树上选择最多的点,使得存在祖先关系的点满足\(w_x\leq w_y\),其中\(x\)是\(y\)的祖先 分析 祖先链上要满足\(LIS\),考虑将子节点的LIS序列合并至节点\(x\) ...

  2. #李超线段树 or 斜率优化+CDQ分治#洛谷 4655 [CEOI2017]Building Bridges

    题目 分析 列出方程即为\(dp[i]=\min\{dp[j]+(h[i]-h[j])^2+s[i-1]-s[j]\}\) \(dp[j]+h[j]^2-s[j]=2*h[i]*h[j]+dp[i]- ...

  3. #特征方程,dp,快速幂#洛谷 4451 [国家集训队]整数的lqp拆分

    题目 分析 设\(dp[n]\)表示答案,因为\(dp[n]=\sum\prod_{i=1}^mF_{a_i}\) \(dp[n]=\sum_{i=1}^{n-1}dp[i]*F_{n-i-1}\) ...

  4. OpenHarmony系统能力SystemCapability使用指南

    一.概述 1.系统能力与 API SysCap,全称SystemCapability,即系统能力,指操作系统中每一个相对独立的特性,如蓝牙,WIFI,NFC,摄像头等,都是系统能力之一.每个系统能力对 ...

  5. 构筑立体世界,AR Engine助力B站会员购打造沉浸式营销

    随着购物场景的逐渐多元化,越来越多电商平台把线下购物体验搬到线上,运用AR技术,跨越空间距离,帮助用户在购买前"体验"商品,增强购买意愿. 哔哩哔哩会员购(后称会员购)是B站于20 ...

  6. openGauss/MogDB配置IPv6

    openGauss/MogDB 配置 IPv6 openGauss/MogDB 支持多种网络接口,假如我们想在支持 IPv6 的网络上部署使用,只需简单操作即可,本文将介绍在 Centos 上如何配置 ...

  7. c# 优化代码的一些规则——什么情况下应该使用new[七]

    前言 new 在重构这本书中写道new就是坏代码的味道,说明使用new的情况并不多. 在这里我指的new 是方法修饰符,而不是指实例. 正文 看下new的作用: new 修饰符可以重新定义从基类继承下 ...

  8. PolarDB开源未来将有哪些新动向?阿里云数据库开源负责人来解答

    简介: 在10月25日由阿里云开发者社区.PolarDB开源社区.infoQ联合举办的「开源人说」第三期--<数据库PolarDB专场>沙龙上,阿里云数据库开源负责人.数据库资深技术专家王 ...

  9. 传统微服务框架如何无缝过渡到服务网格 ASM

    简介: 让我们一起来看下传统微服务迁移到服务网格技术栈会有哪些已知问题,以及阿里云服务网格 ASM 又是如何无缝支持 SpringCloud .Dubbo 这些服务的. 作者:宇曾   背景   软件 ...

  10. 一年增加 1.2w 星,Dapr 能否引领云原生中间件的未来?

    简介: 虽然 Dapr 在国外有很高的关注度,但在国内知名度非常低,而且现有的少量 Dapr 资料也偏新闻资讯和简单介绍,缺乏对 Dapr 的深度解读.在 Dapr v1.0 发布之际,我希望可以通过 ...