Onebox-preview for typeform steals focus

onebox

(Bas van Leeuwen) #1

Reproduction:

  • type some text
  • paste in a typeform link on it’s own line
  • continue typing
  • Now the onebox will take focus;
  • Refocus on the compose box, start to type again

Every time you type a character, the onebox gets re-rendered and the focus is stolen, small but annoying little bug :slight_smile:


(Tobias Wiese) #2

The problem seems to be, that Typeform is loaded in an iframe and then calls HTMLElement.focus.

The solutions I could think of, would be to eighter not load the iframe in the preview window, or (haven’t tried but might work) in the onfocus event of the iframe give the focus back to the editor (doesn’t work. Iframe’s focus event is not called at all).


(Jeff Atwood) #3

This is only possible when you have manually whitelisted the iframe, so not really a bug but “you have opted into pain”.

It’s also their bug, since the action is in their iframe and you should bring it up with them.


(Bas van Leeuwen) #4

This happens on meta


(Sam Saffron) #5

Confirmed, @techAPJ since this is a misbahving onebox can we disable this out of the box?

@Bas I recommend bringing this up with typeform and letting them know we disabled the onebox.

Longer term I want to change our Markdown renderer always to apply diffs as opposed to re-rendering the whole preview.


(Arpit Jalan) #6

I temporarily disabled our custom Typeform onebox engine until they sort out this issue on their side.

For now we will fall back to opengraph onebox for Typeform, like:


(Bas van Leeuwen) #7

I don’t think they’ll listen to me… so no, I won’t raise it with them.


(Jeff Atwood) #8

Then you are hosed because we don’t control typeform.


(Bas van Leeuwen) #9

Fine with that, I personally don’t use typeform that much, just though it was something that you wanted to know :slight_smile:


(John Waltrip) #10

Drat, I really like Discourse’s custom typeform onebox feature. While this sounds like an annoying bug, wouldn’t a workaround be to simply paste in the typeform link after you’ve composed your paragraphs?

As a hosted customer, is there a way I can get this reverted back for my instance?


(Sam Saffron) #11

You can explicitly whitelist it, @techAPJ can you confirm?


(John Waltrip) #12

I tried whitelisting in iframe setting, but no go.


(Arpit Jalan) #14

Onebox only allows blacklisting of domains. The way I disabled Typeform (temporarily) was such that I disabled custom Typeform iframe embedding so that we can at least get the OpenGraph onebox. It’s not possible right now to whitelist Typeform iframe for certain sites.

If we want to do that we’ll have to run a migration for all Discourse instances where we’ll blacklist typeform.com domain (by adding it into onebox domains blacklist setting) and the site admin will then have to remove the typeform.com domain from blacklist setting. Before doing this I want to contact Typeform and explain the issue so that they have a chance to fix this.

I just notified them via Twitter and and their custom Contact us form. I’ll follow up again next week.


(Arpit Jalan) #15

I got a not-so-useful standard response from Typeform asking me to look into their Embed SDK which doesn’t provide any information regarding iframe embeds.

But thinking more about the problem described in first post, I realized that we can fix this issue simply by loading their default OpenGraph image in the composer (as placeholder) instead of rendering full blown iframe. I am not sure why we did this (rendering iframe in composer) in the first place. For example we do not render iframe in composer for slides.com onebox, we render an image instead.

So this issue is now fixed via:

I will update onebox gem version soon Done.


(John Waltrip) #16

Great, thank you! Can you tell me when hosted customers can expect to see this deployed?


(Arpit Jalan) #17

Early next week most probably. If you can message me your community URL I can expedite the process if required.


(Arpit Jalan) #18

We had to remove support for Typeform iframe embedding completely because on topic render the focus was jumping to Typeform causing page jiggling which we absolutely despise.

As per Typeform documentation they do not recommend or support custom iframe embeds: https://developer.typeform.com/embed/custom-embed/

To properly support Typeform we’ll need to create a plugin using their Embed SDK. I do plan to create a plugin for Typeform embedding but it’s not on the top of my list right now.


(John Waltrip) #19

Can we please reconsider completely removing support for this until a better solution comes along?

Best I can tell support for Typeform has been around since 3/2017 and only has one bug against it, this one. While I appreciate this bug was found so that support for Typeform can be improved, it’s a shame that this is now gone completely because a user who doesn’t use Typeform that much reported the issue. I’m guessing either nobody uses Tyepform in Discourse, or they found a workaround for this pesky bug.

Would simply pasting in the iframe link after composing the topic be a sufficient workaround to keep this functionality active, so you don’t have to fight focus?