Onebox-preview for typeform steals focus

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:

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).

5 Likes

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.

2 Likes

This happens on meta

2 Likes

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.

3 Likes

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

https://github.com/discourse/onebox/commit/a581f652d12824e5c3dcc07700d817c8daf0e5d5

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

3 Likes

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

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

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

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?

2 Likes

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

2 Likes

I tried whitelisting in iframe setting, but no go.

1 Like

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.

8 Likes

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:

https://github.com/discourse/onebox/commit/b8faf57d5d1e7de064aa9d5676ae98b076ad3f84

I will update onebox gem version soon Done.

11 Likes

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

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

1 Like

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.

6 Likes

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?

2 Likes

Hello @techAPJ / @sam - Could you suggest a workaround for folks who have been relying on typeform embed since 2017.

In my case, we have a discourse instance with 700 members, and when I want a embeded form with stripe support, I embed the Typeform. It is important rather than sharing the link, as I know that folks only within the community have accessed and are registering.

  • Disabling support for an UI issue seems like an overkill decision.

I realized that white-listing typeform in onebox domains, and or even trying to embed using iframe was not working. (With iframe - it simply blanks).

Could you please share a workaround that will help me to embed the typeform in Discourse?

Thank you!

1 Like

Here is the work around that I am planning going do - since a feature was killed.

  • I am still planing to use the typeform and embed, but I am going to embed in a static HTML page, with my discourse header (at-least looks) like it is a from the same web community.
  • Host that static site under my discourse domain and redirect it using discourse domain URI, so that it will at will at-least request the participants to login via my discourse instance.

All of these hoops and jumps because of this change -

  1. https://github.com/discourse/onebox/commit/a581f652d12824e5c3dcc07700d817c8daf0e5d5
  2. Which was supposedly fixed https://github.com/discourse/onebox/commit/b8faf57d5d1e7de064aa9d5676ae98b076ad3f84
  3. But reverted again - No URI shared in this discussion

With the original support completely lost.

Workaround and suggestions to get typeform within discourse will be appreciable.

Thank you,
Senthil

1 Like