WebDialog.set_html fails under Safari 5.0.6
-
@unknownuser said:
While it is easy to write the HTML to a temp file and load it via set_file, the problem I see is for the refresh (I use set_html when the web dialog is opened). Maybe it will work as well.
So you also use
.set_html
?
I'll be looking into it closer to see if I can make it work with that method, otherwise I have to switch to making a temp file.As you mention, if you delete the temp file while the window is open you break Refresh.
If you observe the tmep folder when you use.set_html
you'll see that SU keeps the temp HTML file around until you call.set_html
again for that window object or until SU closes, where it cleans up all tmep files.Making a cleanup operation from Ruby won't be so easy I think...
-
I tried this:
w=UI;;WebDialog.new "Hello" #<UI;;WebDialog;0x5ff2fa8> w.set_html "Hello" nil GC.start nil w=nil nil GC.start nil
When I invoke
CG.start
the temp file is erased.
I wonder if it's possible to be notified in Ruby when an object is garbage collected... -
-
Before going too far and change the method of building web dialogs, let's try to find out why images cannot be loaded on Safari 5, whereas
- it works fine on previous versions of Safari (but we need the file:// prefix)
- it works fine on IE, any version (prefix file:// not required).
So far, the problem seems to be related to the security of Safari or Lion, since the message is that access to local resources is not allowed. And what we just found out is that Safari would react differently is the web dialog is loaded via set_html vs. set_file.
The question is why? By the way, did you try with loading a HTML file from the /tmp directory with set_file?
Fredo
PS: It is true that the browser designers primarily think about 'connected' web pages, with a real web servers, not using HTML and JS as a simple way to build GUI locally on the PC, without any remote connection and web site. Added to that Apple is known to pay relatively little attention to backward compatibility.
Fredo
-
@unknownuser said:
So far, the problem seems to be related to the security of Safari or Lion, since the message is that access to local resources is not allowed. And what we just found out is that Safari would react differently is the web dialog is loaded via set_html vs. set_file.
Strange new find:
w.set_html '<script>alert( window.location )</script>'
Under Windows:
This presents a messagebox with a string to a temp file.Under OSX with Safari 5.0.6 the messagebox yields "about:blank"
I wonder if that was the case in previous version. Now I can't test...@unknownuser said:
The question is why? By the way, did you try with loading a HTML file from the /tmp directory with set_file?
That's the thing - I can't find what temp location SU writes to now as
window.location
reports nothing...ENV['TMPDIR'] yields
/var/folders/jw/jwKHMuVxGEi4OILNAxFfgU+++TI/-Tmp-/
I can't even find that on the disk... -
Found one of my older posts - I'd forgotten about.
http://forums.sketchucation.com/viewtopic.php?f=180&p=306204#p306122Similar, expect that I made it work with file:// - now that seems to have been closed down as well.
-
@thomthom said:
ENV['TMPDIR'] yields
/var/folders/jw/jwKHMuVxGEi4OILNAxFfgU+++TI/-Tmp-/
:?
I can't even find that on the disk...the path to the -Tmp-
Macintosh HD/private/var/etc...private is a hidden folder
the easiest way to expose hidden folders is HiddenFiles widget softpedia has it
I've got both versions of Safari if you want me to test things..
@fredo, I'll pm you after I test on 5.0.6
-
@thomthom said:
Similar, expect that I made it work with file:// - now that seems to have been closed down as well.
I think a load or reload button may be required or a least help debug, sort of got Fredo's working now.
-
-
sorry, it was late and I didn't explain anything...
Fredo made some tweeks and I was doing the mac testing.
when either fredo's LibFredo6 settings dialog or Cleanup3 dialog are first opened they show in WebInpector Resources as (about:blank)
(about:blank) pages can't be reloaded using normal right-click reload, however with fredo's if you make a selection that forces a content reload like changing the parramaters, (about:blank) is replaced by the proper page, the errors disappear and everything works.
with Cleanup3 there is nothing to click that will force a change, to see if it would then reload properly.
sorry if my logic is flawed, but hopefully this explains what I mean.
john
-
I split of the discussion for this particular issue as it's a problem with the WebDialog class itself and not the plugin in itself.
-
Didn't John do some testing awhile back where he had to use "
file://localhost/
" or similar ?What if the resources were in the user's path.. "
**~**/Library/Application Support/
...etc." -
@dan rathbun said:
Didn't John do some testing awhile back where he had to use "
file://localhost/
" or similar ?Yes, but now even that fails.
-
@thomthom said:
Making a cleanup operation from Ruby won't be so easy I think...
Don't overlook the Standard Library... "
tmpdir.rb
" and "tempfile.rb
" -
Been having similar problems trying to run a local copy of firebug... looks like it's time to set up a simple server. I think Dan Berger has one in the win32-api package.
-
@thomthom said:
I split of the discussion for this particular issue as it's a problem with the WebDialog class itself and not the plugin in itself.
I agree, and before we engage in workarounds and other approximate fixing, we really need to understand where the issue comes from and why it does materialized differently in two versions of Safari which should not be so different (5.03 and 5.06, correct?).
In any case, we need to hear from the SU team, because they must have an idea of how the web dialogs are integrated with Safari on Mac and clarify why security is handled differently by a
set_html
and aset_file
.Fredo
-
Isn't it that there are three different BUT 'related'
.set_
methods?**WebDialog.set_file** Used to set a *local* HTML file to display in the webdialog. Arguments: filename = The filename for the webdialog file (HTML file). path = (optional) A path to which the filename is relative. Returns: nil Usage: dialog.set_file("C:\\Temp\\mypage.html")
OR
**WebDialog.set_html** Used to load a string of *HTML code* into the webdialog. Arguments: html_string = A string of valid html to display in your webdialog. Returns: nil Usage: dialog.set_html("Hello world!")
OR
**WebDialog.set_url** Used to load a specific *URL* into the webdialog, i.e. it loads a *web-site* into the webdialog. Arguments: url = The URL for a specific web site. Returns: nil Usage: dialog.set_url("http://www.google.com")
They are not meant to be interchangeable
-
TIG: The problem is that when you use
.set_html
you do not get access to local resources any more under OSX Safari 5.0.6+. -
Ok.. now, both Safari and Chrome use Webkit.
IF (assumption) both implement security polices in a similar way (on Mac via a manifest plist file inside the bundle,) you might compare the settings pre and post Safari 5.0.6.
On Chrome the settings are in file "com.google.Chrome.manifest", so (hoping,) that for Safari, the file would be something like "com.apple.Safari.manifest".
I'm going by the Chrome policy list when I suggest looking for policy "DisabledSchemes", or "SafeBrowsingEnabled", "ImagesBlockedForUrls", "JavaScriptAllowedForUrls", etc. (see the list... or find the list explicitly for Safari.)
P.S. : I wonder if Mac Sketchup changes any of these Safari security policies when it installs, to enable correct use of WebDialogs, ... and by upgrading to a newer Safari version, the policy file is overwritten. (So a comparison of the Safari manifest file, both pre and post Sketchup install, may also be in order.)
-
@thomthom said:
TIG: The problem is that when you use
.set_html
you do not get access to local resources any more under OSX Safari 5.0.6+.have you got an example of
.set_html
that works on older Safari, I've been going through all my old bits and I can't find an example that ever worked, heres some variations of .set_url and .set_file that all (bar one) work under Safari 5.0.6, I'm not including the files, unless you want them, it's more about the syntax, which is slightly different from 5.0.3 if you use .set_file("file:///...) Safari adds an additional file:/ to the url and reports an errordlg1 = UI;;WebDialog.new("BoilerPlate1", true, "BP1", 200, 200, 110, 0, true); dlg1.set_url("file;///Library/Application%20Support/Google%20SketchUp%208/SketchUp/plugins/WD_BoilerPlate_cln/demo/tests.html") dlg1.set_background_color("#fff") dlg1.show_modal #works dlg2 = UI;;WebDialog.new("BoilerPlate2", true, "BP2", 200, 200, 310, 0, true); dlg2.set_file("/Volumes/Macintosh HD/Library/Application Support/Google SketchUp 8/SketchUp/plugins/WD_BoilerPlate_cln/demo/elements.html") dlg2.set_background_color("#fff") dlg2.show_modal #works, BUT an external ajax call for js fails, local backup js loads instead dlg3 = UI;;WebDialog.new("BoilerPlate3", true, "BP3", 200, 200, 510, 0, true); dlg3.set_file("/Library/Application Support/Google SketchUp 8/SketchUp/plugins/WD_BoilerPlate_cln/test/index.html") dlg3.set_background_color("pink") dlg3.show_modal #works dlg4 = UI;;WebDialog.new("BoilerPlate4", true, "BP4", 200, 200, 710, 0, true); dlg4.set_url("file;///volumes/Macintosh%20HD/Library/Application%20Support/Google%20SketchUp%208/SketchUp/plugins/WD_BoilerPlate_cln/test/index.html") dlg4.set_background_color("grey") dlg4.show_modal #works dlg5 = UI;;WebDialog.new("BoilerPlate5", true, "BP5", 200, 200, 910, 0, true); dlg5.set_url("file;//localhost/Library/Application%20Support/Google%20SketchUp%208/SketchUp/plugins/WD_BoilerPlate_cln/404.html") dlg5.set_background_color("#fff") dlg5.show_modal #works dlg6 = UI;;WebDialog.new("BoilerPlate6", true, "BP6", 200, 200, 1110, 0, true); dlg6.set_file("/Library/Application Support/Google SketchUp 8/SketchUp/plugins/_LaptopLearnig/Ch1/TextBook.pdf") dlg6.set_background_color("#fff") dlg6.show_modal #works dlg7 = UI;;WebDialog.new("BoilerPlate7", true, "BP7", 200, 200, 1310, 0, true); dlg7.set_url("file;///volumes/Macintosh%20HD/Library/Application%20Support/Google%20SketchUp%208/SketchUp/plugins/_LaptopLearnig/Ch1/TextBook.pdf") dlg7.set_background_color("#fff") dlg7.show_modal #works dlg8 = UI;;WebDialog.new("BoilerPlate8", true, "BP8", 200, 200, 1510, 0, true); dlg8.set_url("file;//localhost/Library/Application%20Support/Google%20SketchUp%208/SketchUp/plugins/_LaptopLearnig/Ch1/TextBook.pdf") dlg8.set_background_color("#fff") dlg8.show_modal #works dlg9 = UI;;WebDialog.new("BoilerPlate9", true, "BP9", 200, 200, 1710, 0, true); dlg9.set_url("http://localhost/Library/Application%20Support/Google%20SketchUp%208/SketchUp/plugins/_LaptopLearnig/Ch1/TextBook.pdf") dlg9.set_background_color("#fff") dlg9.show_modal # DOSEN'T work[it is a pdf afterall]... but do I get a Not Found message #The requested URL /Library/Application Support/Google SketchUp 8/SketchUp/plugins/_LaptopLearnig/Ch1/TextBook.pdf was not found on this server. dlg10 = UI;;WebDialog.new("aceSUedit", false,"ace", 900, 600, 50, 350, false); dlg10.set_url("http://upstairs.lan/cloud9/cloud9/support/ace/ModalWindow.html") dlg10.show_modal #works and is an extremely complex html with lots of dynamic content
I'll set these all up on Safari 5.0.3 tomorrow and see how they fair.
john
Advertisement