So, I kind of skipped v1.0.6, which I promised in this post yesterday. There were some unchecked changes on a different laptop that I forgot in v1.0.6, so I published v1.0.7 this morning with all the updates. Some notable update:
- Moved from CloseDialog() to CloseDialogAsync() on all the dialogs using the original close method. This is to workaround the issue described in the post yesterday.
- Fixed dialog flashing by hiding the body until the form is ready to be shown. Before you might get a flash of all the controls on the form as they were not hidden before.
- Internal clean-up and message handling. In the message pump between the dialogs.html and dialogs.js, I cleaned up the pump to use internally standardized messages.
- Fixed some JSDoc information that was wrong. And there is likely still more.
- Fixed some things that were not working correctly with the progress dialog.
- Small tweeks and comments, code clean-up
I also published the latest version to NPM. Simply type this in you code terminal window:
npm -install officejs.dialogs
I still have a published CDN for OfficeJS.dialogs, but at this point I am going to suggest against using it. I have encountered a number of issues with my message pump when loaded cross-domain. Specifically:
- you will be able to show a MessageBox, but the Update() method will not work
- you will be able to show a Progress dialog, but the Update() method will not change the dialog. The progress bar will never advance.
What is happening is that I was going to need for **you** the developer to provide me your own proxyHTML file (pointing to my CDN/proxy.js library) that I will do the following:
- Add an iframe, load my html file in that iFrame, post the dialog settings to the iFrame where my dialog in the iFrame gets it, and writes it to localStorage on the CDN domain.
- Window.replace the contents with my dialogs.html from the CDN. And since the localStorage now has the dialog settings, configure the dialog.
- I then create an hidden iFrame in my dialog and then load your proxy html file. I attach to the body change event inside the iFrame.
- I then start a message pump in the proxy looking for changes to localStorage.
- If a new message comes from your code with an Update() on MessageBox or Progress, I then get it from the localStorage in a message and write it to the body, therefore updating the iFrame in my dialog, thereby triggering the change event I latched on to, allowing me to write that value to the CDN localStorage where the message pump in dialog will get the message and update the form.
That hurt my brain writing that out. And maybe that is more for my posterity since it took me Binging the Internet to death (I don’t use to the G word folks ), just to get that far. My pretzel, I mean head hurts.
Bottom line, I want to get OfficeJS.dialogs to work cross-domain. I am not sure if the above method is the right approach. I have asked far brighter minds than my own and watched Autie Anne’s Syndrome set in almost immediately. So, if any of you have some ideas on how I can establish 2-way communication between domains like this (without using some crazy huge library), please let me know.