解決IE 11異常SCRIPT 501:リリース済みScriptのコードを実行できない
26112 ワード
機能の概要:
最近1つの教育の科学研究システムをして、时间が比较的にきついため、集積することができる机能はすべてできるだけいっしょにすることができて、その中の1つのアップロードの添付ファイルの机能、ベースクラスのコントローラBaseControllerの中で1つのActionを建ててビューに戻って、その他の添付ファイルをアップロードする必要がある地方はすべて统一してこのビューのポップアップのモードのウィンドウwindow.showModalDialogを呼び出して、アップロードされたファイルのパスとデータベース・テーブルに保存されている添付ファイルのパスのguidを返し、呼び出しページで添付ファイルに戻るguidをデータ・テーブルに保存します.
問題:
この機能は火狐ブラウザでは完全に正常ですが、IE 11ブラウザ(他のバージョンではテストされていません)では、Scriptを解放したコードを実行できないという異常が発生します.しかし、実際に値は取得されていますが、nullなどのタイムズ異常かどうかを直接判断します.
ソリューション:
ポップアップウィンドウで返される配列オブジェクトを文字列に変更し、呼び出しページに戻るとオブジェクトに解析します(オブジェクトは参照タイプ:の付与はアドレス、文字列は値タイプ:付与は伝達値).
呼び出しページjsコード:
表示ページコード:
参照:http://blog.sina.com.cn/s/blog_6ac4c6cb0101is29.html
IE 6、IE 7、IE 8、chrome、firefoxのいくつかのwindowの主流のブラウザで、すべて正常に運行することができて、IE 9の上でこの問題が発生して、実は、私達はモードの方式で1つのウィンドウを開けて、戻る対象に対して"=="を使って文字列と比較する時エラーが発生します.オブジェクトを生成するウィンドウが破棄されたため、このオブジェクトのvalueOfやtoStringなどのメソッドを調整すると上記のエラーが発生し、最初は次のようになります.
json変数を使用して戻り値を受信し、{id:1,name:senly,age:26}のようなオブジェクトフォーマットを返します.
var json=モードウィンドウ戻り値(window.showModalDialog(url,...))
戻ったら判断します
if(IsEmpty(json )) return;
IsEmptyメソッド貼り付け
function IsEmpty(obj){ if(typeof(obj)=="undefined"||obj==null||(typeof(obj)!="object"&&(obj+"").replace(//g,"")==""|| obj=="null"|| obj.length==0)){ return true; } return false; }
この処理で、異常SCRIPT 501:リリース済みScriptを実行できないコードが報告されました
シナリオは==を使用して判断されるので、IE 9では許可されません.そのため、私たちはこのように処理することができます.
try{
if(IsEmpty(json.id))
return;
}catch(err){
return;
)
注意:
以上,この異常発生の原因と,その異常に対するフォールトトレランス処理について説明したが,IE 9,IE 10により,モダリティウィンドウのデータ再送を実現したい場合,どのようにしてデータを正しく取得すればよいのだろうか.
まず、ie 9/10は、文字列型/ブール型のデータコールバックに対してサポートされる.例えば、
Windows.returnValue=「モードウィンドウから戻ってきたデータです」
または
window.returnValue = true;
親ウィンドウでの最終パス
var json=モードウィンドウ戻り値(window.showModalDialog(url,...))
取得したjsonはすべて間違いなく、例えば
「モードウィンドウから返されたデータです」またはtrue
ただし、オブジェクト型のデータを返すと、リリース済みScriptのコードを実行できない異常が発生します
たとえば、{id:1,name:senly,age:26}などのオブジェクトフォーマットを返します.
では、だめです.この場合、データを返すときに、オブジェクトデータを文字列につなぎ、親ウィンドウで受信した後、evalで文字列をオブジェクトに変換することができます.たとえば、次のようにします.
モダリティウィンドウで戻るには、次の手順に従います.
var dataStr = "{id:1,name:'senlypan'}";
window.parent.window.returnValue = dataStr ;
最終的に親ウィンドウで解析:
var json=モードウィンドウ戻り値(window.showModalDialog(url,...))
//モードウィンドウ、処理キャンセル/クローズ[undefined]try{
if(IsEmpty(json))return;
}catch(err){
return;
)
//モードウィンドウ、returnValueの処理 [オブジェクト破棄],オブジェクトは互換性がなくstrを使用してオブジェクトに変換:var obj=eval_r('('+json+')');
このとき,オブジェクトから属性値を取得でき,例えばobj.idやobj.nameで1やsenlypanが得られる.
最近1つの教育の科学研究システムをして、时间が比较的にきついため、集積することができる机能はすべてできるだけいっしょにすることができて、その中の1つのアップロードの添付ファイルの机能、ベースクラスのコントローラBaseControllerの中で1つのActionを建ててビューに戻って、その他の添付ファイルをアップロードする必要がある地方はすべて统一してこのビューのポップアップのモードのウィンドウwindow.showModalDialogを呼び出して、アップロードされたファイルのパスとデータベース・テーブルに保存されている添付ファイルのパスのguidを返し、呼び出しページで添付ファイルに戻るguidをデータ・テーブルに保存します.
問題:
この機能は火狐ブラウザでは完全に正常ですが、IE 11ブラウザ(他のバージョンではテストされていません)では、Scriptを解放したコードを実行できないという異常が発生します.しかし、実際に値は取得されていますが、nullなどのタイムズ異常かどうかを直接判断します.
ソリューション:
ポップアップウィンドウで返される配列オブジェクトを文字列に変更し、呼び出しページに戻るとオブジェクトに解析します(オブジェクトは参照タイプ:の付与はアドレス、文字列は値タイプ:付与は伝達値).
呼び出しページjsコード:
1 /*
2 *
3 * typeFlag:1- ,2- ,3-
4 */
5 function MyUpload(dom, guid, typeFlag) {
6 var obj = new Object();
7 var strResult = window.showModalDialog('/Base/ShowUploadView?typeFlag=' + typeFlag, obj, "dialogWidth=600px;dialogHeight=300px;");
8 if (strResult != null && strResult != undefined && strResult != "" && strResult.length > 0) {
9 var ArrResult = eval(strResult);
10 if (ArrResult[0].guid != null && ArrResult[0].guid != undefined && ArrResult[0].guid != "") {
11 $.ajax({
12 url: '/InstrumentShare/UpdateContractAttachmentData',
13 type: 'post',
14 dataType: 'text',
15 data: { 'headID': guid, 'filesID': ArrResult[0].guid },
16 success: function (result) {
17 if (result === ""||result===null) {
18 if (dom.nextElementSibling.nodeName === "A") { // a
19 dom.nextElementSibling.href = ArrResult[0].filesPath;
20 dom.nextElementSibling.style.display = ""; // a ,
21 }
22 alert(" !");
23 }
24 else {
25 alert(" :" + result);
26 }
27 },
28 error: function (result) {
29 alert(" : !");
30 }
31 });
32 }
33
34 }
35 }
表示ページコード:
1 @{
2 ViewBag.Title = " ";
3 Layout = "~/Views/Shared/_Layout-nofooter.cshtml";
4 }
5
6 <script src="~/Scripts/UploadsFile/jquery.uploadify-3.1.min.js" type="text/javascript"></script>
7 <link href="~/Scripts/UploadsFile/uploadify.css" rel="stylesheet" />
8
9
10 <div class="modal-header" style="height:50px;">
11 <h4 id="myModalLabel"> </h4>
12 </div>
13 <div class="modal-body">
14 <table class="basicTable">
15 <tr>
16 <td class="edu_width100"> :</td>
17 <td id="attachmentName"></td>
18 </tr>
19 <tr>
20 <td>
21 <input type="file" id="file_upload" name="file_upload" />
22 <span></span>
23 </td>
24 <td></td>
25 </tr>
26 </table>
27 @*<div class="row">
28 <div class="col-lg-4"> :</div>
29 <div class="col-lg-6">
30 <span id="attachmentName"></span>
31 </div>
32 <div class="col-lg-2"></div>
33 </div>
34 <div class="row">
35 <div>
36 <input type="file" id="file_upload" name="file_upload" />
37 <span></span>
38 </div>
39 </div>*@
40 </div>
41 <div class="modal-footer">
42 <button class="scbtn addBtn" aria-hidden="true" onclick="GetRetuValue()">
43
44 </button>
45 <button class="scbtn btn-warning" aria-hidden="true" onclick="CancelSelect()">
46
47 </button>
48 </div>
49
50
51 <script type="text/javascript">
52 //
53 var strResult;
54 var typeFlag = '@ViewBag.typeFlag';// :1- ,2- ,3-
55 var filesType = '*.*';//
56
57 /*
58 *
59 */
60 $(function () {
61 //
62 if (typeFlag === '1') {
63 filesType = '*.doc;*.txt;*.ppt;*.xls;*.docx;*.xlsx;*.rar;*.zip';
64 }
65 //
66 else if (typeFlag === '2') {
67 filesType = '*.jpg;*.jpeg;*.png';
68 }
69 //
70 else if (typeFlag === '3') {
71 filesType = '*.swf;*.flv;*.gif';
72 }
73 else {
74 alert(" !");
75 window.close();
76 }
77 })
78 function uploadfile() {
79 $('#file_upload').uploadify('upload', '*');
80 }
81
82 function Clearupload() {
83 $('#file_upload').uploadify('cancel', '*');
84 }
85
86 /*
87 *
88 */
89 $(function () {
90 var strPath = '';
91 $('#file_upload').uploadify({
92 'swf': '@Url.Content("~/Scripts/UploadsFile/uploadify.swf")',
93 'buttonText': ' ',
94 'auto': true,
95 multi: true,
96 //'uploadLimit': 1,
97 //'queueSizeLimit': 1,
98 'fileTypeExts': filesType,
99 'formData': { 'typeFlag': '@ViewBag.typeFlag' },//
100 'uploader': '/Base/uploadsAttachment',
101 'fileSizeLimit': '100MB',
102 'onSelectError': function (file, errorCode, errorMsg) {
103 switch (errorCode) {
104 case -100:
105 alert(" " + $('#file_upload').uploadify('settings', 'queueSizeLimit') + " !");
106 break;
107 case -110:
108 alert(" [" + file.name + "] " + $('#file_upload').uploadify('settings', 'fileSizeLimit') + " !");
109 break;
110 case -120:
111 alert(" [" + file.name + "] !");
112 break;
113 }
114 },
115 'onUploadComplete': function (file) {
116 Clearupload();
117 },
118 'onQueueComplete': function (data) {
119 Clearupload();
120 //$("#Attachment").val($("#Attachment").val() + ";" + strPath);
121 },
122 'onUploadSuccess': function (file, data, response) {
123 var result = eval('(' + data + ')');
124 if (result.Success) {
125 if (result.guid != undefined && result.guid != 'undefined') {
126 //
127 aResult = new Array();
128 //eval({ guid: "ae3c9336-1101-49fd-8116-755cef6bbd27", filesPath: " '/Base/MyDownLoad?Filepath='/UpLoadFile/images/b648fdd0-19d5-4e78-8435-db2ff8d2d147.jpg" })
129 //aResult={'guid: "'+ result.guid+'", filesPath: "/Base/MyDownLoad?Filepath='+result.filesPath+ '"'};
130
131 aResult.push({ guid: result.guid, filesPath: '/Base/MyDownLoad?Filepath=' + result.filesPath });
132 strResult = JSON.stringify(aResult);
133 $("#attachmentName").text(result.FileName);
134 alert(" !");
135 }
136 } else {
137 alert(result.Message);
138 return false;
139 }
140 return true;
141 },
142 onUploadError: function (file, errorCode, erorMsg, errorString) {
143 }
144 });
145 });
146
147 /*
148 *
149 */
150 function DeleteAttachment(attachmentID, fileName, typeFlag) {
151 if (confirm(" 【 " + fileName + "】 ?")) {
152 $.ajax({
153 url: '/Base/DeleteAttachment',
154 type: 'post',
155 datatype: 'text',
156 data: { attachmentID: attachmentID, attachmentID: attachmentID, fileName: fileName, typeFlag: typeFlag },
157 success: function (rel) {
158 var data = eval(rel);
159 if (data.Success) {
160 // ,
161 //$('#span_' + attachmentID).remove();
162 }
163 alert(data.Message);
164 }
165 });
166 }
167 }
168
169 /*
170 * dialog ( ):
171 */
172 function GetRetuValue(result) {
173 //
174 window.returnValue = strResult;
175 window.close();
176 }
177
178 /*
179 * dialog ( ):
180 */
181 function CancelSelect() {
182 //
183 window.returnValue = "";
184 window.close();
185 }
186 </script>
187 <!-- ModalEnd -->
参照:http://blog.sina.com.cn/s/blog_6ac4c6cb0101is29.html
IE 6、IE 7、IE 8、chrome、firefoxのいくつかのwindowの主流のブラウザで、すべて正常に運行することができて、IE 9の上でこの問題が発生して、実は、私達はモードの方式で1つのウィンドウを開けて、戻る対象に対して"=="を使って文字列と比較する時エラーが発生します.オブジェクトを生成するウィンドウが破棄されたため、このオブジェクトのvalueOfやtoStringなどのメソッドを調整すると上記のエラーが発生し、最初は次のようになります.
json変数を使用して戻り値を受信し、{id:1,name:senly,age:26}のようなオブジェクトフォーマットを返します.
var json=モードウィンドウ戻り値(window.showModalDialog(url,...))
戻ったら判断します
if(IsEmpty(json )) return;
IsEmptyメソッド貼り付け
function IsEmpty(obj){ if(typeof(obj)=="undefined"||obj==null||(typeof(obj)!="object"&&(obj+"").replace(//g,"")==""|| obj=="null"|| obj.length==0)){ return true; } return false; }
この処理で、異常SCRIPT 501:リリース済みScriptを実行できないコードが報告されました
シナリオは==を使用して判断されるので、IE 9では許可されません.そのため、私たちはこのように処理することができます.
try{
if(IsEmpty(json.id))
return;
}catch(err){
return;
)
注意:
以上,この異常発生の原因と,その異常に対するフォールトトレランス処理について説明したが,IE 9,IE 10により,モダリティウィンドウのデータ再送を実現したい場合,どのようにしてデータを正しく取得すればよいのだろうか.
まず、ie 9/10は、文字列型/ブール型のデータコールバックに対してサポートされる.例えば、
Windows.returnValue=「モードウィンドウから戻ってきたデータです」
または
window.returnValue = true;
親ウィンドウでの最終パス
var json=モードウィンドウ戻り値(window.showModalDialog(url,...))
取得したjsonはすべて間違いなく、例えば
「モードウィンドウから返されたデータです」またはtrue
ただし、オブジェクト型のデータを返すと、リリース済みScriptのコードを実行できない異常が発生します
たとえば、{id:1,name:senly,age:26}などのオブジェクトフォーマットを返します.
では、だめです.この場合、データを返すときに、オブジェクトデータを文字列につなぎ、親ウィンドウで受信した後、evalで文字列をオブジェクトに変換することができます.たとえば、次のようにします.
モダリティウィンドウで戻るには、次の手順に従います.
var dataStr = "{id:1,name:'senlypan'}";
window.parent.window.returnValue = dataStr ;
最終的に親ウィンドウで解析:
var json=モードウィンドウ戻り値(window.showModalDialog(url,...))
//モードウィンドウ、処理キャンセル/クローズ[undefined]try{
if(IsEmpty(json))return;
}catch(err){
return;
)
//モードウィンドウ、returnValueの処理 [オブジェクト破棄],オブジェクトは互換性がなくstrを使用してオブジェクトに変換:var obj=eval_r('('+json+')');
このとき,オブジェクトから属性値を取得でき,例えばobj.idやobj.nameで1やsenlypanが得られる.