3

I have reproduced this problem with chrome (with firefox and with IE works fine). I have two files, one is test_index.html and other is test.html.

the code of test_index is the following:

<html>
<head>


<meta name=description content="">
<meta name=keywords content="">
<Title></Title>
</head>

<frameset cols="190,*" framespacing="0" border="0" frameborder="0">
<frame name="menu_frame" target="principale" src="test.html" marginwidth="0" marginheight="0" scrolling="auto">
<frame name="principale" src="" scrolling="no" marginwidth="0" marginheight="0" target="principale">
</frameset>

</html>

the code of test.html is the following:

<html>
<head>
<script type="text/javascript">
function writedoc() {
    newWindow = window.open( '','principale','width=100%');
    newWindow.document.open();
    newWindow.document.writeln('<html><head><title>Pictures Slide Show</title></head><body><p>Hello World</p></body></html>');
}
</script>
</head>
<body>

<input type="button" onclick="writedoc()"  />

</body>
</html>

So when I click the button nothing happens in chrome, what am i doing wrong?

user1238784
  • 2,250
  • 3
  • 22
  • 41
  • 1
    Hi, just incase you don't know frames are deprecated in HTML now: http://stackoverflow.com/questions/4263509/why-are-frames-deprecated-in-html – Billy Moat Apr 03 '14 at 15:53
  • It's been a very long time since I didn't work with frames since they're deprecated, but I don't think you need to do this `window.open` to refer to the `principale` frame – Laurent S. Apr 03 '14 at 15:54
  • 1
    If you're running this locally, Chrome blocks frames as they were cross-domain. This should be working on a server though. But you really should wrap attribute values within quotes... – Teemu Apr 03 '14 at 16:04
  • Hi yes I am running it locally. Is there any work-around, can I use iframes instead of frames? – user1238784 Apr 03 '14 at 16:05
  • 1
    Please check [this SO answer](http://stackoverflow.com/a/5664399/1169519), though I'm not sure if it still works. The same happens with iframes, they are also blocked. Btw. A simple way to write to a frame would be: `window.frames['principale'].document.writeln(...);`. – Teemu Apr 03 '14 at 16:07
  • @teemu Thank you, Ill be glad to accept your answer if you publish it – user1238784 Apr 03 '14 at 16:19

2 Answers2

1

In Chrome (i)frames are treated as cross-domain windows when running local pages (i.e. with file protocol). (Why?). Passing --allow-file-access-from-files switch at start-up should tackle the problem (credits @Justin).

Some observations of your code

  • framesets and frames are obsoleted in HTML5, if you really need external windows, use iframes instead.
  • Attribute values should be always wrapped in quotes. Unwrapped attributes are working now, but they might not work in the future. Also values containing spaces will break the markup.
  • A simple reference to (i)frame's window object is window.frames['frame_name'], you don't need complex window.open()
  • document.open() is not needed, document.write(ln)() opens the document automatically
  • After document.write(ln)() you have to close the document with document.close() to stop browser loading
Community
  • 1
  • 1
Teemu
  • 22,918
  • 7
  • 53
  • 106
0

It worked with me on chrome when i clicked the button it showed to me a window "Hello world" in it,

try to add "" in cols : cols="190,*"

Mejri Yassine
  • 99
  • 1
  • 8