Make WordPress Core

Opened 3 years ago

Last modified 3 years ago

#22446 closed defect (bug)

Insert Media modal: IE 7, 8, and 9 issues — at Version 32

Reported by: SergeyBiryukov Owned by: ocean90
Milestone: 3.5 Priority: normal
Severity: normal Version: 3.5
Component: Media Keywords: audit has-patch commit
Focuses: Cc:

Description (last modified by nacin)

  1. The vertical line on the left is displayed in IE 9, but not in IE 8 (see 22446.ie8.png, 22446.ie9.png). [22610]
  1. "Drop files anywhere to upload" shouldn't be displayed in IE 7/8/9, as it doesn't support drag-and-drop (at least it doesn't on wp-admin/media-new.php). [22609]
  1. IE 7 needs some attention for the gallery view, see 22446.ie7_gallery.png
  1. IE 7 doesn't display the selected images (22446.ie7_selected_images.png) and in IE 9 you can see the second line (22446.ie9_selected_images.png)
  1. In IE 7 and IE 8 you can't see which image is currently selected (blue border is missing), see 22446.ie8_selected_image.png. The check mark has been improved. Should be enough.
  1. In IE 7 Embed from URL doesn't work. Nothing happens after inserting an URL.
  1. When uploading an image in IE 7 ( and IE 8?) a pop up comes up which wants to download admin-ajax.php. The file includes the JSON respond. [22845]
  1. IE 8: Upload an image, switch to media library, try to change the filter dropdown. It will open the upload dialog. [22781]
  1. IE 8, 9, 10: Non-image thumbnails are quite off, see 22446.ie9.selected-music.png​ or 22446.ie9.selected-music2.png​.
  1. IE 7, 8, 9: Images are inserted only at the beginning/top of the content in TinyMCE. 22446-ie789-insert.patch

Change History (44)

@SergeyBiryukov3 years ago

@SergeyBiryukov3 years ago

@ocean903 years ago

comment:1 @ocean903 years ago

  • Description modified (diff)
  • Summary changed from Insert Media modal looks odd in IE 8 to Insert Media modal: IE 7, 8, and 9 issues

comment:2 @SergeyBiryukov3 years ago

  • Description modified (diff)

comment:3 @ocean903 years ago

  • Description modified (diff)

comment:4 @ocean903 years ago

  • Keywords needs-patch added
  • Owner set to ocean90
  • Status changed from new to accepted

comment:5 @nacin3 years ago

  • Keywords audit added

@ocean903 years ago

comment:6 @ocean903 years ago

The missing borders around the images are a result of the use of box-shadow, which IE 7 and 8 doesn't support. I think we should try to use real CSS borders here.

comment:7 @koopersmith3 years ago

In 22609:

Media: Only display "Drop files" text when the browser supports drag and drop. see #22446, #21390.

comment:8 @koopersmith3 years ago

In 22610:

Media: Add an explicit border to menus to show a divider in older browsers. see #22446, #21390.

comment:9 @ocean903 years ago

  • Description modified (diff)

comment:10 @koopersmith3 years ago

In 22611:

Media: The zIndex arms race.

Adjusts zIndexes to be not-as-absurd as before, in the process moving the modal below the plupload flash shims (which do not have customizable zIndexes or classes, sadly).

fixes #22441, see #22446, #21390.

comment:11 @koopersmith3 years ago

In 22612:

Media: zIndex peace was only temporary.

Revert [22611] in favor of using plupload's container setting. Turns out, plupload's flash shim is forced to the exact same index as the admin bar, so balancing the two is better solved by nesting the shim.

see #22441, #22446, #21390.

comment:12 @ocean903 years ago

  • Description modified (diff)

comment:13 @ocean903 years ago

  • Description modified (diff)

comment:14 @ocean903 years ago

  • Description modified (diff)

comment:15 @nacin3 years ago

Priority 1: IE9 and IE8.

Priority 10: IE7. If we just hide this feature for IE7, I won't complain. We need to spend time on making sure that IE9 and IE8 work. Until they have no bugs, IE7 shouldn't be touched.

comment:16 @lessbloat3 years ago

In IE8 When I upload an image (by clicking "Select files"), I see the following: http://cl.ly/image/2X392f3O2c3l (tested locally and on my MediaTemple server).

comment:17 @ocean903 years ago

  • Description modified (diff)

comment:18 follow-up: @lessbloat3 years ago

RE: comment:16:

MarkJaquith got on Skype and helped me figure out a fix for this. In wp-includes/functions.php line 2276 if you replace:

@header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );


@header( 'Content-Type: text/html;' );

The issue is resolved for me. Can we do this conditionally for IE7 & IE8?

comment:19 @nacin3 years ago

I forgot about this. Older versions of IE don't like application/json and should instead receive text/plain (I think, over text/html). Not sure if there are workarounds beyond browser detection or always serving text/*.

I seem to recall there being an explicit JS-based, koop-ordered reason for delivering application/json instead of text/html here. He will know if text/plain would be okay instead.

comment:20 in reply to: ↑ 18 @azaozz3 years ago

Replying to lessbloat:

... Can we do this conditionally for IE7 & IE8?

Not just IE7 and 8, IE9 doesn't understand application/json either.

comment:21 follow-up: @koopersmith3 years ago

We're using application/json so jQuery's ajax method automatically parses the JSON. It also accepts text/javascript, which sounds like a viable IE fallback. I'd like to see a patch that sniffs for IE and replies with text/javascript instead.

If that doesn't work, we can overload it client-side to make sure that takes place, but then our shiny new ajax functions lose a bit of their luster.

comment:22 in reply to: ↑ 21 ; follow-up: @azaozz3 years ago

Replying to koopersmith:

I'd like to see a patch that sniffs for IE and replies with text/javascript instead.

Unfortunately IE doesn't recognize text/javascript either. Only text/html.

Would that patch be:

if ( $is_IE )
  @header( 'Content-Type: text/html;' );
  @header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );
Last edited 3 years ago by azaozz (previous) (diff)

comment:23 in reply to: ↑ 22 @lessbloat3 years ago

Replying to azaozz:

Would that patch be:

if ( $is_IE )
  @header( 'Content-Type: text/html;' );
  @header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );

$is_IE didn't appear to be set (or accessible), I borrowed most of your code for 22446-download-ajax.diff which​ fixes this issue for me in IE8.

Note: IE7 continues to output errors when attempting to upload an image. Could be issues in addition to the Content-Type declaration.

Last edited 3 years ago by lessbloat (previous) (diff)

comment:24 @koopersmith3 years ago

The fact that all of the other XHR requests are performing correctly means that jQuery is handling the current code correctly — the error here is with plupload. And understandably so, as it is juggling numerous transports.

Instead of using the new wp_send_json_* methods (which we already had to manually parse), we should just use the traditional method of echoing some json and calling wp_die() in wp_ajax_upload_attachment().

Attaching a patch to do just that.

@koopersmith3 years ago

comment:25 @lessbloat3 years ago

+1 to 22446.upload.diff​. Works for me in IE7 and IE8.

comment:26 @azaozz3 years ago

+1 to commit 22446.upload.diff​, works here too.

comment:27 @nacin3 years ago

In 22845:

Don't use wp_send_json_* handlers in the upload-attachment XHR handler.

The difference is the content type: application/json (which jQuery deserializes automatically for us) and the default text/html.

jQuery correctly handles application/json requests for IE, so we can continue to use the wp_send_json_* handlers elsewhere. Plupload rolls its own requests and does not handle application/json correctly. So, keep the standard text/html content type on upload-attachment.

props koopersmith.
see #22446.

comment:28 @ocean903 years ago

  • Description modified (diff)

comment:29 @nacin3 years ago

All I see left is:

  • Non-image thumbnails are off in IE8-10
  • Everything else is IE7 only

If that is accurate, I'd like to close this ticket out, and have a single IE7 ticket, and individual tickets for anything else that comes up.

comment:30 @azaozz3 years ago

Not sure if that's new but images are inserted only at the beginning/top of the content in MCE in all IE7-8-9. Looking at this now.

@azaozz3 years ago

comment:31 @azaozz3 years ago

22446-ie789-insert.patch​ saves a bookmark of the caret position in TinyMCE (only needed for IE) that is restored later, before inserting content/using send_to_editor().

comment:32 @nacin3 years ago

  • Description modified (diff)

Adding azaozz's bug and patch to the end here.

Let's aim to polish off items 9 and 10 ASAP, then close this ticket and spin the IE7 stuff off.

Note: See TracTickets for help on using tickets.