SAP UI5 加载本地并不存在的 PDF 文件的错误处理

2022-12-23  本文已影响0人  _扫地僧_

这个 _onLoadListener 函数什么时候注册的呢?

iframe 完成加载之后,就触发这个 load 事件注册的处理函数:


PDFViewer.prototype.onAfterRendering = function () {
            var fnInitIframeElement = function () {
                // cant use attachBrowserEvent because it attach event to component root node (this.$())
                // load event does not bubble so it has to be bind directly to iframe element
                var oIframeElement = this._getIframeDOMElement();

                oIframeElement.on("load", this._onLoadListener.bind(this));
                oIframeElement.on("error", this._onErrorListener.bind(this));

load 事件:


application/pdf 是支持的 mime type:

判断浏览器是否支持直接查看 pdf 文件的方法:


点了 loading errors 之后,bContinue 标志位为 false,因为此时 oTarget[0].contentWindow.document.embeds 为空:

所以进入此处的 else 分支:


PDFViewer.prototype._renderErrorState 里,把下载按钮设置为 disabled:

在函数 PDFViewerRenderer.renderPdfContent 里:

进入 else 分支。

拿到 ErrorPlaceHolder:


读取的是 null:


这个属性是从哪里读取的呢?


从这个 https://sapui5.hana.ondemand.com/resources/sap/m/messagebundle_en_US.properties 文件里读取。

在这个方法里读取:


this.renderErrorContent(oRm, oControl);

这个方法的名称是动态植入的:getPlaceholderMessagePageControl

当 PDF 查看器嵌入到 sap.m.IconTabBar 控件中时,切换选项卡时可能无法重新加载 PDF 文档。 要解决此问题,可以执行以下任一操作:

用户可用的辅助功能可能会有所不同,具体取决于安装的 Adobe Acrobat Reader 版本。

该控件支持的几种 displayType:sap.m.PDFViewerDisplayType

(1) 在移动设备(手机、平板电脑)上,PDF 查看器显示为带有下载按钮的工具栏。

(2) 在桌面设备上,PDF 查看器嵌入在其父容器中。

上一篇下一篇

猜你喜欢

热点阅读