Solved

how to build iframe url from javascript variable

Posted on 2010-08-12
10
504 Views
Last Modified: 2012-05-10
As shown in the code below, I'm using javascript date() to populate an iframe with a different page every day.

My javascript successfully produces var fday e.g. special_today/12.html  on the 12th of the month.

However, I can't get my syntax right inserting this into the iframe. For example I've tried   src = + fday +   and src=&fday.

BTW this iframe works fine when I hard code the url.
<script type="text/javascript">
<!--
var currentTime = new Date()
var day = currentTime.getDate()
var fday = 'special_today/' + day + '.html'
//-->
</script>
	<iframe id="feat1" src = + fday + width="294" height="70" scrolling="no" frameborder="0" margin-top:0px marginwidth="0" marginheight="10" style="visibility:hidden;" onload="document.getElementById('feat1').style.visibility = 'visible';"> 
              <p>Your browser does not support iframes.</p></iframe>

Open in new window

0
Comment
Question by:NEILPH
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 3
  • 2
10 Comments
 
LVL 2

Expert Comment

by:GLoad
ID: 33425991
You cannot just build a string in html using javascript + like you are above. Also avoid the visibility approach that you might use for a div in an iframe.

Try using the window.load method. In your case the solution would be as follows...

<script type="text/javascript">

function load()
{
var currentTime = new Date()
var day = currentTime.getDate()
var fday = 'special_today/' + day + '.html'
document.getElementById('feat1').src = fday;
}
window.onload = load;
</script>

      <iframe id="feat1" width="294" height="70" scrolling="no" frameborder="0" margin-top:0px marginwidth="0" marginheight="10">
              <p>Your browser does not support iframes.</p></iframe>
0
 

Author Comment

by:NEILPH
ID: 33426281
Thanks. That works.

However, your avoidance of div\visibility in the iframe causes me a different problem.

My parent page and frames both have a "yellow" <body bgcolor="#ffcc00"> background.

If I don't use style="visibility:hidden;" onload="document.getElementById('feat1').style.visibility = 'visible';">  I get an ugly white space in the frame before the child page loads.

I've demonstrated this for you at http://www.newsknife.com/test.html The left frame uses your code.  The right frame uses the visibility routine.

If you look at our home page http://www.newsknife.com you'll see this will be a significant problem.

What's the problem using div\visibility?
0
 

Author Comment

by:NEILPH
ID: 33426283
I meant The top frame uses your code.  The bottom frame uses the visibility routine.
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 2

Expert Comment

by:GLoad
ID: 33426475
You can use the visibility as well if you like. Depends on how long the frame takes to load really. Just set the style sheet class change in the javascript load method when everything else is done.
0
 

Author Comment

by:NEILPH
ID: 33426654
I'm sorry. You're going beyond my javascript knowledge when you say "Just set the style sheet class change in the javascript load method when everything else is done."

I've added visibility to your code (see below) but now the visibility hidden\visible no longer works.

Without the visibility working the iframe does look awful waiting to load, e.g. at http://www.newsknife.com/test.html


<body bgcolor="#ffcc00">
<script type="text/javascript">
function load()
{
var currentTime = new Date()
var day = currentTime.getDate()
var fday = day + '.html'
document.getElementById('feat1').src = fday;
}
window.onload = load;
</script>

      <iframe id="feat1" width="294" height="70" scrolling="no" frameborder="0" margin-top:0px marginwidth="0" marginheight="10" style="visibility:hidden;" onload="document.getElementById('feat1').style.visibility = 'visible';"> 
              <p>Your browser does not support iframes.</p></iframe>

Open in new window

0
 
LVL 75

Expert Comment

by:Michel Plungjan
ID: 33428369
Here. Problem solved

<script>
document.write('<iframe id="feat1" src="'+new Date.getDate()+'.html" width="294" height="70" scrolling="no" frameborder="0" margin-top:0px marginwidth="0" marginheight="10" style="visibility:hidden;" 
onload="document.getElementById('feat1').style.visibility = 'visible';"></iframe>')
</script>

Open in new window

0
 
LVL 75

Expert Comment

by:Michel Plungjan
ID: 33428379
If you want to NOT see the iframe at all until loaded (also you could more all the styling into the style tag:

<script>
document.write('<iframe id="feat1" src="'+new Date.getDate()+'.html" width="294" height="70" scrolling="no" frameborder="0"  marginwidth="0" marginheight="10" style="display:none; margin-top:0px" 
onload="document.getElementById('feat1').style.display='';"></iframe>')
</script>

Open in new window

0
 

Author Comment

by:NEILPH
ID: 33434969
I can't get either of your above to work in IE8 or Firefox. Absolutely nothing happens, including no iframe space in the parent page.

I've tried variations [see below] to try to see if the problem is in the date syntax or layout syntax.

- avoid putting the getDate() inline,
- change Date.getDate() to currentTime.getDate(),
- not use dates
- change style.visibility = 'visible' to style.visibility:visible

It beats me.
Version: date variable preset...
<script>
var currentTime = new Date()
var day = currentTime.getDate()
var fday = 'todays_specials/' + day + '.html'
document.write('<iframe id="feat3" src="'+ fday +'.html" width="294" height="70" scrolling="no" frameborder="0" margin-top:0px marginwidth="0" marginheight="10" style="visibility:hidden;" 
onload="document.getElementById('feat3').style.visibility = 'visible';"><p>Your browser does not support iframes.</p></iframe>')
</script>


Version: inline date variable changed to currentTime
<script>
document.write('<iframe id="feat3" src="todays_specials/'+new currentTime.getDate()+'.html" width="294" height="70" scrolling="no" frameborder="0"  marginwidth="0" marginheight="10" style="display:none; margin-top:0px" 
onload="document.getElementById('feat3').style.display='';"><p>Your browser does not support iframes.</p></iframe>')
</script>

Version: change visible syntax at end, and not using dates
<script>
document.write('<iframe id="feat3" src="browser_test2.html" width="294" height="70" scrolling="no" frameborder="0" margin-top:0px marginwidth="0" marginheight="10" style="visibility:hidden;" 
onload="document.getElementById('feat3').style.visibility:visible;"></iframe>')
</script>

Open in new window

0
 
LVL 75

Accepted Solution

by:
Michel Plungjan earned 500 total points
ID: 33435457
Sorry I forgot to escape the single quotes and you broke the lines and had a .html too many - document.write does not like that



<script>
var currentTime = new Date()
var day = currentTime.getDate()
var fdayFile = 'http://www.google.com/search?q=todays_specials/' + day + '.html'
document.write('<iframe id="feat3" src="'+ fdayFile +'" width="294" height="70" scrolling="no" frameborder="0" margin-top:0px marginwidth="0" marginheight="10" style="visibility:hidden;" onload="document.getElementById(\'feat3\').style.visibility = \'visible\';"><p>Your browser does not support iframes.</p></iframe>')
</script>
<hr />

Open in new window

0
 

Author Closing Comment

by:NEILPH
ID: 33438560
Brilliant. Thanks mplungjan.
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Is your Office 365 signature not working the way you want it to? Are signature updates taking up too much of your time? Let's run through the most common problems that an IT administrator can encounter when dealing with Office 365 email signatures.
Finding original email is quite difficult due to their duplicates. From this article, you will come to know why multiple duplicates of same emails appear and how to delete duplicate emails from Outlook securely and instantly while vital emails remai…
In this tutorial viewers will learn how to position items using CSS's three positioning types Create a new HTML document with an internal stylesheet.: Create another div in CSS and name it Absolute : Type "position:absolute;" and "top:10px; left:50p…
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

756 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question