Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Embedding a google presentation inside html + clicking next slide from JS

I have embedded a google presentation inside my web-app, using iframe.

<iframe src="https://docs.google.com/presentation/..." />

And that works and is great, but I am trying to programmatically (with JavaScript) to press next (when I need to go to the next slide). I want to be able to control when next is called based on my logic.

At first I tried doing that using:

let iframe = document.querySelector("iframe")
let iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
// get the next button's div
iframeDoc.querySelector(".punch-viewer-navbar-next").click()

But it failed on just let iframeDoc = iframe.contentDocument || iframe.contentWindow.document; because iframe limits you from accessing the content using JS if it's from another domain (I guess that's what happens in new chrome versions)

So I proxied my site and docs.google behind some port and then did a different iframe

<iframe src="https://localhost:7777/presentation/..." />

So I don't have an issue with making the above code run - but it has no effect - I see not result.

I guess I can continue and understand why div inside iframe click doesn't work (probably security issue), but this already sounds like a too cumbersome solution for what I need.

Do you know of any API or something that google presentation offers to help you do a simple next programmatically?

like image 254
user967710 Avatar asked Oct 25 '25 09:10

user967710


1 Answers

I haven't seen anything resembling an API, but you can append the page number at the url you request to get a specific slide, for example https://docs.google.com/presentation/.../embed#slide=9 will show the 9th slide. So you can change the iframe src using javascript.

Warning: it re-downloads the whole slideshow every time you change this, so if you can find any other way to do this, it would probably be better.

Unfortunately I don't see a way to get feedback from the iframe on which slide is currently shown, so I would suggest hiding the controls with rm=minimal (https://docs.google.com/presentation/.../embed?rm=minimal#slide=9) and placing a mask over the iframe to stop the user from changing the slide outside your control.

Edit: You can also check this: https://developers.google.com/slides

like image 113
Johan Malan Avatar answered Oct 27 '25 00:10

Johan Malan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!