【問題與解決】showModalDialog is not defined 的解決方案

来源:https://www.cnblogs.com/yc-755909659/archive/2018/09/13/9641868.html
-Advertisement-
Play Games

背景: showModalDialog 是比較老的方法了,有些瀏覽器不再支持彈出模態視窗了。 比如說谷歌瀏覽就不再支持了,有文章說明如下: Chrome’s Lack of Support for showModalDialog Breaks Some Enterprise Web Apps 彈出窗 ...


背景:

showModalDialog 是比較老的方法了,有些瀏覽器不再支持彈出模態視窗了。

比如說谷歌瀏覽就不再支持了,有文章說明如下:

Chrome’s Lack of Support for showModalDialog Breaks Some Enterprise Web Apps

 

彈出視窗代碼:

var obj = new Object();  
var retval = window.showModalDialog("request.aspx",obj,"dialogWidth=500px;dialogHeight=300px"); 
if (retval == null) {
...
}else {
...
}

瀏覽器報錯:

Uncaught TypeError: undefined is not a function

其中有些臨時解決辦法,但貌似showModalDialog不會回來了。

 

問題解決

常見的彈出視窗有div模擬或者用window.open代替,對於一個已經在用的系統來說,採用div方式轉換成本較高,採用window.open改動會更少一些,但也會丟失其模態性。

這裡採用簡單的window.open方案,畢竟替換成本低很多。針對上文中提到的showModalDialog使用方式,替換為:

var iWidth = 500; 
var iHeight = 300; 
var iTop = (window.screen.availHeight - 30 - iHeight) / 2; 
var iLeft = (window.screen.availWidth - 10 - iWidth) / 2; 
var win = window.open("request.aspx", "彈出視窗", "width=" + iWidth + ", height=" + iHeight + ",top=" + iTop + ",left=" + iLeft + ",toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no,alwaysRaised=yes,depended=yes");

 

參數說明

dialogWidth:對話框寬度。 
dialogLeft:距離桌面左的距離。 
dialogTop:離桌面上的距離。 
center:{yes|no|1|0}:視窗是否居中,預設yes,但仍可以指定高度和寬度。 
help:{yes|no|1|0}:是否顯示幫助按鈕,預設yes。 
resizable:{yes|no|1|0}[IE5+]:是否可被改變大小。預設no。 
status:{yes|no|1|0}[IE5+]:是否顯示狀態欄。預設為yes[Modeless]或no[Modal]。 
scroll:{yes|no|1|0|on|off}:指明對話框是否顯示滾動條。預設為yes。 還有幾個屬性是用在HTA中的,在一般的網頁中一般不使用。 
dialogHide:{yes|no|1|0|on|off}:在列印或者列印預覽時對話框是否隱藏。預設為no。 edge:{sunken|raised}:指明對話框的邊框樣式。預設為raised。 unadorned:{yes|no|1|0|on|off}:預設為no。

 

採用這種方式就可以打開一個和之前使用showModalDialog差不多的視窗。但是怎麼返回值呢?

在彈出頁面中有兩種方式:

1、直接設置父視窗的DOM對象的值。

window.opener.document.getElementById(“parentWindowControlId”).value = "數據";

父視窗中應該有一個id為parentWindowControllId的DOM元素。

 

2、調用父視窗中的Javascript函數,由父視窗進行相應的處理。

var obj = { id:"id", name:"name" };  window.opener.DoAfterXXX(obj);

父視窗提供一個DoAfterXXX的函數就可以了。

 

長遠來看window.open由於其用戶體驗問題必將走向沒落,還是儘快轉移為好。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • adb 命令模擬按鍵事件 模擬 點擊 事件 有時我們需要程式模擬按鈕或點擊,而手機本身又沒有,哪麽可以採取adb 模擬實現,最後再去實際設備去測試(前期一般都拿不到設備); 如模擬上一首,下一首,暫停等,手機上是沒有的,但有些設備上是有的; //這條命令相當於按了設備的語音鍵(按此鍵後,進入語音識別 ...
  • 概述 Retrofit是一個OkHttp網路請求框架的封裝庫,Retrofit通過註解配置網路參數,可以按照我們的規則去構造實際的HTTP請求,能夠靈活設置URL、頭部、請求體、返回值等,是目前最優雅的一個網路框架。 引入 Retrofit基本使用三部曲 創建實例 定義介面 創建 同步/非同步 回調 ...
  • PoPo數據可視化 聚焦於Web數據可視化領域, 發現前端可視化領域有意思的內容. 涵蓋前端可視化領域最新資訊, 開源可視化庫的發佈更新消息, 可視化案例分析與講解, 可視化技術文章, 可視化大神的日常, 可視化八卦等等...不想錯過前端可視化領域的精彩內容, 就快快搜索公眾號popodv_com關 ...
  • 《一統江湖的大前端》系列是自己的前端學習筆記,旨在介紹javascript在非網頁開發領域的應用案例和發現各類好玩的js庫,不定期更新。如果你對前端的理解還是寫寫頁面綁綁事件,那你真的是有點OUT了,前端能做的事情已經太多了, , , , , , 甚至 ,什麼火就搞什麼,活脫脫一個 蹭熱點小能手 。 ...
  • JavaScript 事件 JavaScript事件 事件是可以被JavaScript偵測到的行為。 HTML事件是發生在HTML元素上的事情。 當在HTML頁面中使用JavaScript時,JavaScript可以出發這些事件。 HTML事件 HTML事件可以是瀏覽器行為,也可以是用戶行為。 HT ...
  • 在之前我們學了6種選擇器和三種CSS樣式的引入,學習選擇器就是為了更好的選擇文本,學習CSS的引入是為了使文本增加各種樣式和屬性, 下麵我們簡單來學習一下為文本加樣式和一些屬性和屬性值: 1.文本的樣式 text (1)顏色 color:red/blue/pink/···; (2)文本對齊方式 te ...
  • 列表與邊距探討和行塊 一、列表 1.無序列表(UL) 1)內部必須有子標簽<li></li>2)天生自帶內外邊距 p也是自帶 大家會發現用UL的時候內容前面會出現一個像這樣的一個實心圓 可以用屬性list-style 去掉也可以更換(list-style:none;)circle空心圓 disc實心 ...
  • iview 安裝 引入iview ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...