SharePoint 2013/2010 点击 Viso web part中的节点相同页面的IFrame显示节点的超连接指向的页面

来源:互联网 发布:淘宝店铺首页打不开 编辑:程序博客网 时间:2024/05/18 11:12

SharePoint Viso service 可以在线显示Viso的网页版文件(.vdw),并提供一套API对其操作http://msdn.microsoft.com/en-us/library/ff394593.aspx。

本文讲述SharePoint 2013/2010 点击 Viso web part中的节点相同页面的IFrame显示节点的超连接指向的页面。

1. 创建一个Viso文件,向其中添加若干节点,并给节点添加超连接

 

 

 

2. 将该Viso文件保存为VisoJS.vdw并上传至SharePoint 网站的文档库中

3. 新建一个页面,向其中插入Viso access web part,并设置要显示的vdw路径 

4. 添加嵌入(Embed)Javascript 代码

插入代码如下(注意替换WebPartWPQ2为对应的Viso web part的ID): 

<IFrame id="visoTestFrame" ></IFrame><script type="text/javascript" >       // 注册Viso/Execel applation service web part 加载事件    Sys.Application.add_load(onApplicationLoad);    // Viso webpart 的ID,可通过查看网页源代码或F12找到    var webPartId = "WebPartWPQ2";    var vwaControl;    var currentShape;    // 处理Viso/Execel applation service web part 加载事件    function onApplicationLoad() {        try        {            vwaControl = new Vwa.VwaControl(webPartId);            // 注册绘画完成事件            vwaControl.addHandler("diagramcomplete", onDiagramComplete);        }        catch (err) {            alert("onApplicationLoad\n" + err);        }    }    // 处理Viso绘图完成事件    function onDiagramComplete() {        try        {            // 注册当前选中的Shape发生变化事件            vwaControl.addHandler("shapeselectionchanged", onShapeSelectionChanged);            // 注册鼠标离开图形的事件            vwaControl.addHandler("shapemouseleave", onMouseLeaveShape);            // 注册鼠标进入图形的事件            vwaControl.addHandler("shapemouseenter", onMouseEnterShape);                   }        catch (err) {            alert("onDiagramComplete\n" + err);        }           }    // 处理当前选中的Shape发生变化    function onShapeSelectionChanged(sender, args) {        // 取当前选中的图形        var shape = GetShapeById(args);        // 取图形上附加的超链接        var links = shape.getHyperlinks();        // 取第一个超链接并将visoTestFrame的 source url设置为该超链接所指向的地址        if (links.length >= 1) {            var visoTestFrame = $("#visoTestFrame")[0];            if (visoTestFrame) {                visoTestFrame.src = links[0].value;                 visoTestFrame.width = 600;                 visoTestFrame.height = 800;            }        }        // 可以给图形添加Highlit的颜色(可使用removeHighlight移除),但是如果完全覆盖了图形,则图形不能响应所有鼠标事件(select, mouse enter, mouse leave)        // shape.addHighlight(30, "#FF0000");    }    // 处理鼠标进入事件    function onMouseEnterShape(sender, args) {               currentShape = GetShapeById(args);        console.log("onMouseEnterShape, ID:" + args);    }    // 处理鼠标离开事件    function onMouseLeaveShape(sender, args) {        currentShape = null;        console.log("onMouseLeaveShape, ID:" + args);    }    // 添加覆盖层,缺点是添加完Overlay后,该图形就不能相应选中事件了, 可使用removeOverlay移除    function AddOverlay(vwaShape, color) {        if (!color) color = "#88FF0000";        vwaShape.addOverlay(                    "Overlay",                    "<Rectangle Height=\"" + vwaShape.getBounds().height + "\"" +                    " Width=\"" + vwaShape.getBounds().width + "\"" +                    " Stroke=\"Black\" StrokeThickness=\"1\" Fill=\"" + color + "\"" +                    " RadiusX=\"0.0\" RadiusY=\"0.0\"\/>",                    1,                    1,                    vwaShape.getBounds().width,                    vwaShape.getBounds().height);           }    // 根据图形的id取图形    function GetShapeById(id) {        // 取得当前处于活动状态的Viso页面        var vwaPage = vwaControl.getActivePage();        // 取得该页面上的所有图形,包括箭头        var vwaShapes = vwaPage.getShapes();        // 根据图形的id取图形       var vwaShape = vwaShapes.getItemById(id);       return vwaShape;    }   </script>