Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Javascript (http://www.velocityreviews.com/forums/f68-javascript.html)
-   -   fixing Google AdSense (http://www.velocityreviews.com/forums/t922534-fixing-google-adsense.html)

Roedy Green 01-21-2006 02:18 PM

fixing Google AdSense
 
Google Adsense is a scheme where by Google pays you to put ads on your
website. see http://mindprod.com/jgloss/google.html#ADSENSE

The catch is, the javascript they use makes the pages unusable when
the adserver is not available either because google is down, the link
to Google is down, or you are browsing pages offline.

I know nothing of JavaScript. I have written to google about the
problem and got one of those thanks for sharing form letters.

I wondered if it what I want them to do is technically possible --
suppress the ads when offline or the server does not respond in say 3
seconds.

Presuming Google does not fix the problem, I wondered if I could wrap
or modify the JavaScript myself to make this work, or perhaps use some
other technique.


Here is the JavaScript they use:

(function(){

function m(b){return b!=null?'"'+b+'"':'""'}

function C(b){if(typeof
encodeURIComponent=="function"){return
encodeURIComponent(b)}else{return escape(b)}}

function B(b,a,d){var f=a.indexOf("?");
var e="http://pagead2.googlesyndication.com/pagead/imp.gif?event=";
e+=d;
if(f!=-1&&f+1<a.length){e+="&"+a.substring(f+1)}var h='<img height="1"
width="1" border="0" src='+m(e)+"/>";
b.write(h)}

function c(b,a){if(a){window.google_ad_url+="&"+b+"="+a}}

function g(b,a){if(a){c(b,C(a))}}

function l(b,a,d){if(a&&typeof
a=="object"){a=a[d%a.length]}c("color_"+b,a)}

function E(b,a){var d=b.screen;
var f=navigator.javaEnabled();
var e=-a.getTimezoneOffset();
if(d){c("u_h",d.height);
c("u_w",d.width);
c("u_ah",d.availHeight);
c("u_aw",d.availWidth);
c("u_cd",d.colorDepth)}c("u_tz",e);
c("u_his",history.length);
c("u_java",f);
if(navigator.plugins){c("u_nplug",navigator.plugin s.length)}if(navigator.mimeTypes){c("u_nmime",navi gator.mimeTypes.length)}}

function
y(b){b=b.toLowerCase();
if(b.substring(0,3)!="ca-"){b="ca-"+b}return
b}

function
H(b,a,d){d=d.substring(0,1000);
d=d.replace(/%\w?$/,"");
if(b.google_ad_output=="js"&&(b.google_ad_request_ done||b.google_radlink_request_done)){a.write('<sc ript
language="JavaScript1.1" src='+m(d)+"></"+"script>")}else
if(b.google_ad_output=="html"){if(b.name=="google_ ads_frame"){B(a,d,"reboundredirect")}else{a.write( '<iframe
name="google_ads_frame" width='+m(b.google_ad_width)+"
height="+m(b.google_ad_height)+"
frameborder="+m(b.google_ad_frameborder)+" src="+m(d)+'
marginwidth="0"'+' marginheight="0"'+' vspace="0"'+'
hspace="0"'+' allowtransparency="true"'+'
scrolling="no">');
B(a,d,"noiframe");
a.write("</iframe>")}}}

function G(b){var a=null;
b.google_ad_frameborder=a;
b.google_ad_format=a;
b.google_page_url=a;
b.google_language=a;
b.google_gl=a;
b.google_country=a;
b.google_region=a;
b.google_city=a;
b.google_hints=a;
b.google_safe=a;
b.google_encoding=a;
b.google_ad_output=a;
b.google_max_num_ads=a;
b.google_ad_channel=a;
b.google_contents=a;
b.google_alternate_ad_url=a;
b.google_alternate_color=a;
b.google_color_bg=a;
b.google_color_text=a;
b.google_color_link=a;
b.google_color_url=a;
b.google_color_border=a;
b.google_color_line=a;
b.google_adtest=a;
b.google_kw_type=a;
b.google_kw=a;
b.google_num_radlinks=a;
b.google_max_radlink_len=a;
b.google_rl_filtering=a;
b.google_rl_mode=a;
b.google_rt=a;
b.google_ad_type=a;
b.google_image_size=a;
b.google_feedback=a;
b.google_skip=a;
b.google_page_location=a;
b.google_referrer_url=a;
b.google_ad_region=a;
b.google_ad_section=a;
b.google_bid=a;
b.google_cpa_choice=a}

function A(){var b=null;
var a=window;
var d=document;
var f=new Date();
var e=f.getTime();
var h=a.google_ad_format;
if(a.google_cpa_choice){a.google_ad_url="http://pagead2.googlesyndication.com/cpa/ads?";
a.google_ad_url+="client="+escape(y(a.google_ad_cl ient));
a.google_ad_region="_google_cpa_region_";
c("cpa_choice",a.google_cpa_choice)}else{a.google_ ad_url="http://pagead2.googlesyndication.com/pagead/ads?";
a.google_ad_url+="client="+escape(y(a.google_ad_cl ient))}var
k=a.google_num_slots_by_client;
var w=a.google_num_slots_by_channel;
var j=a.google_prev_ad_formats_by_region;
a.onerror=a.google_org_error_handler;
if(a.google_ad_region==b&&a.google_ad_section!=b){ a.google_ad_region=a.google_ad_section}var
i=a.google_ad_region==b?"":a.google_ad_region;
var q=false;
if(h){q=h.indexOf("_0ads")>0}if(q){if(a.google_num _0ad_slots){a.google_num_0ad_slots=a.google_num_0a d_slots+1}else{a.google_num_0ad_slots=1}if(a.googl e_num_0ad_slots>1){return}}else
if(!a.google_cpa_choice){if(a.google_num_ad_slots) {a.google_num_ad_slots=a.google_num_ad_slots+1}els e{a.google_num_ad_slots=1}if(a.google_num_slots_to _rotate){j[i]=b;
if(a.google_num_slot_to_show==b){a.google_num_slot _to_show=e%a.google_num_slots_to_rotate+1}if(a.goo gle_num_slot_to_show!=a.google_num_ad_slots){retur n}}else
if(a.google_num_ad_slots>3&&i==""){return}}c("dt", f.getTime());
c("hl",a.google_language);
if(a.google_country){c("gl",a.google_country)}else {c("gl",a.google_gl)}c("gr",a.google_region);
g("gcs",a.google_city);
g("hints",a.google_hints);
c("adsafe",a.google_safe);
c("oe",a.google_encoding);
c("lmt",a.google_last_modified_time);
g("alternate_ad_url",a.google_alternate_ad_url);
c("alt_color",a.google_alternate_color);
c("skip",a.google_skip);
var n=a.google_ad_client;
if(!k[n]){k[n]=1;
k.length+=1}else{k[n]+=1}if(j[i]){g("prev_fmts",j[i].toLowerCase());
if(k.length>1){c("slot",k[n])}}if(h){g("format",h.toLowerCase());
if(j[i]){j[i]=j[i]+","+h}else{j[i]=h}}c("num_ads",a.google_max_num_ads);
c("output",a.google_ad_output);
c("adtest",a.google_adtest);
if(a.google_ad_channel){var r=a.google_ad_channel.toLowerCase();
g("channel",r);
var s="";
var t=r.split("+");
for(var o=0;
o<t.length;
o++){var p=t[o];
if(!w[p]){w[p]=1}else{s+=p+"+"}}g("pv_ch",s)}g("url",a.google_pa ge_url);
l("bg",a.google_color_bg,e);
l("text",a.google_color_text,e);
l("link",a.google_color_link,e);
l("url",a.google_color_url,e);
l("border",a.google_color_border,e);
l("line",a.google_color_line,e);
c("kw_type",a.google_kw_type);
g("kw",a.google_kw);
g("contents",a.google_contents);
c("num_radlinks",a.google_num_radlinks);
c("max_radlink_len",a.google_max_radlink_len);
c("rl_filtering",a.google_rl_filtering);
c("rl_mode",a.google_rl_mode);
c("rt",a.google_rt);
c("ad_type",a.google_ad_type);
c("image_size",a.google_image_size);
c("region",a.google_ad_region);
c("feedback_link",a.google_feedback);
g("ref",a.google_referrer_url);
g("loc",a.google_page_location);
c("bid",a.google_bid);
if(z(a,d)&&d.body){var u=d.body.scrollHeight;
var v=d.body.clientHeight;
if(v&&u){g("cc",Math.round(v*100/u))}}E(a,f);
H(a,d,a.google_ad_url);
G(a)}

function D(b,a,d){A();
return true}

function z(b,a){return b.top.location==a.location}

function x(b,a){var d=a.documentElement;
if(z(b,a))return
false;
if(b.google_ad_width&&b.google_ad_height){var f=1;
var e=1;
if(b.innerHeight){f=b.innerWidth;
e=b.innerHeight}else
if(d&&d.clientHeight){f=d.clientWidth;
e=d.clientHeight}else
if(a.body){f=a.body.clientWidth;
e=a.body.clientHeight}if(e>2*b.google_ad_height||f >2*b.google_ad_width){return
false}}return true}

function F(){var b=window;
var a=document;
var d=a.location;
var f=a.referrer;
var e=null;
b.google_org_error_handler=b.onerror;
b.onerror=D;
if(b.google_ad_frameborder==e){b.google_ad_framebo rder=0}if(b.google_ad_output==e){b.google_ad_outpu t="html"}if(b.google_ad_format==e&&b.google_ad_out put=="html"){b.google_ad_format=b.google_ad_width+ "x"+b.google_ad_height}if(b.google_page_url==e){b. google_page_url=f;
if(!x(b,a)){b.google_page_url=d;
b.google_last_modified_time=Date.parse(a.lastModif ied)/1000;
b.google_referrer_url=f}}else{b.google_page_locati on=f;
if(!x(b,a)){b.google_page_location=d}}if(b.google_ num_slots_by_channel==e){b.google_num_slots_by_cha nnel=new
Array()}if(b.google_num_slots_by_client==e){b.goog le_num_slots_by_client=new
Array()}if(b.google_prev_ad_formats_by_region==e){ b.google_prev_ad_formats_by_region=new
Array()}}

F();
A();
})()
--
Canadian Mind Products, Roedy Green.
http://mindprod.com Java custom programming, consulting and coaching.

Martin Honnen 01-21-2006 03:01 PM

Re: fixing Google AdSense
 


Roedy Green wrote:

> Google Adsense is a scheme where by Google pays you to put ads on your
> website. see http://mindprod.com/jgloss/google.html#ADSENSE
>
> The catch is, the javascript they use makes the pages unusable when
> the adserver is not available either because google is down, the link
> to Google is down, or you are browsing pages offline.


Browsers like IE or Firefox have a setting to browse offline, I don't
think they will make any requests to servers in that setting, be that
for script files, ad images or other resources. So browsing offline with
the proper setting on the browser shouldn't be the problem.

And what does unusable mean? I could understand that page display is
much delayed when such a script is not available, the browser has to
wait with further rendering until it has the script and has it executed
so there can be delays then until the connection times out and the
browser continues without having the script.




--

Martin Honnen
http://JavaScript.FAQTs.com/

Roedy Green 01-21-2006 03:58 PM

Re: fixing Google AdSense
 
On Sat, 21 Jan 2006 16:01:55 +0100, Martin Honnen <mahotrash@yahoo.de>
wrote, quoted or indirectly quoted someone who said :

>And what does unusable mean? I could understand that page display is
>much delayed when such a script is not available, the browser has to
>wait with further rendering until it has the script and has it executed
>so there can be delays then until the connection times out and the
>browser continues without having the script.


In the Opera browser which I use most often, it won't completely
render the page below the ad until it has the ad contents. It will sit
there for a very long time before it gives up maybe a minute or so.
It does not "finish" rendering the page and give control back to you.

I have 24-7 internet access, so most of the time it works fine.
However I encourage people to mirror my site with the Replicator
software and browse offline for speed.

I run into a similar problem with webrings. See
http://mindprod.com/jgloss/webring.html
--
Canadian Mind Products, Roedy Green.
http://mindprod.com Java custom programming, consulting and coaching.

VK 01-21-2006 04:08 PM

Re: fixing Google AdSense
 

Roedy Green wrote:
> I wondered if it what I want them to do is technically possible --
> suppress the ads when offline or the server does not respond in say 3
> seconds.


Technically possible if it's for offline browsing - thus it's run on
local drive - thus you may bypass cross-domain security limitations for
ads iframe (say getting error messages from it).

By did you try more simple way by setting defer flag?

for conventional HTML:
<script type="text/javascript" src="myScript.js" defer></script>
or for XHTML (if you bother to use it):
<script type="text/javascript" src="myScript.js"
defer="defer"></script>

This way the page will be rendered w/o delay, and script will fail
seemlessly on the background.


Roedy Green 01-21-2006 05:28 PM

Re: fixing Google AdSense
 
On 21 Jan 2006 08:08:33 -0800, "VK" <schools_ring@yahoo.com> wrote,
quoted or indirectly quoted someone who said :

>By did you try more simple way by setting defer flag?


I did not write that code. Google did. I don't even know how to read
it, other than in a generic way since I speak Java, and many other
computer languages, but not JavaScript.
--
Canadian Mind Products, Roedy Green.
http://mindprod.com Java custom programming, consulting and coaching.

VK 01-21-2006 05:44 PM

Re: fixing Google AdSense
 

Roedy Green wrote:
> On 21 Jan 2006 08:08:33 -0800, "VK" <schools_ring@yahoo.com> wrote,
> quoted or indirectly quoted someone who said :
>
> >By did you try more simple way by setting defer flag?

>
> I did not write that code. Google did. I don't even know how to read
> it, other than in a generic way since I speak Java, and many other
> computer languages, but not JavaScript.


I did not mean to change the code itself but set the "defer" flag for
interpreter. In Java terms it would be like javac myProg.java -defer
(there is not such flag in Java but the mechanics is close).
"defer" is supported by the majority of browsers made over the last few
years (IE, FF and Opera 8.x inclusive). It tells to interpreter that
the code to execute doesn't change the page immediately during initial
loading and that it doesn't provide any vital parts needed to render
the page during the initial loading. This way the page is being
rendered at the normal speed w/o waiting script results.

JavaScript code is being inserted into page in two ways: either inline
or as separate .js file:

<script type="text/javascript" defer>
// your code
// ...
</script>

<script type="text/javascript" src="myScript.js" defer></script>

Again: no changes needed in the code itself. If any problems please
give us a link to some HTML page you want to destribute.


Martin Honnen 01-21-2006 05:45 PM

Re: fixing Google AdSense
 


Roedy Green wrote:

> On 21 Jan 2006 08:08:33 -0800, "VK" <schools_ring@yahoo.com> wrote,
> quoted or indirectly quoted someone who said :
>
>
>>By did you try more simple way by setting defer flag?

>
>
> I did not write that code. Google did.


He was simply suggesting to use
<script type="text/javascript" defer>
// script code goes here
</script>
respectively
<script type="text/javascript" src="file.js" defer></script>
in your HTML documents where you include the script. Not a change to the
script itself.
That defer attribute however is something only IE supports and anything
the script will output (with document.write) then will end up at a
different location than before as IE will treat the script differently
<http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/properties/defer.asp>
and defer its execution till the HTML of the page has been parsed.

--

Martin Honnen
http://JavaScript.FAQTs.com/

Matt Kruse 01-21-2006 08:41 PM

Re: fixing Google AdSense
 
Roedy Green wrote:
> The catch is, the javascript they use makes the pages unusable when
> the adserver is not available either because google is down, the link
> to Google is down, or you are browsing pages offline.


I've never seen evidence that a page becomes 'unusable'.

What I do hate about AdSense, though, is that the body's onLoad doesn't fire
until it's loaded, and it's often slow.

A while ago, I messed around with a consistent way to defer the loading of
the iframe by re-assigning the document.write function to actually store the
google content in a variable, which I then wrote out later after the page
was loaded. It was quite a hack, though.

Is there a more solid solution for consistently deferring the adsense
content load so the body's onLoad event fires without waiting for the google
content to load?

--
Matt Kruse
http://www.JavascriptToolbox.com
http://www.AjaxToolbox.com



Jim Ley 01-21-2006 09:05 PM

Re: fixing Google AdSense
 
On Sat, 21 Jan 2006 14:41:58 -0600, "Matt Kruse"
<newsgroups@mattkruse.com> wrote:

>Is there a more solid solution for consistently deferring the adsense
>content load so the body's onLoad event fires without waiting for the google
>content to load?


Your better bet is to just avoid doing stuff onload - there's very
little that's relevant to onload other than doing "is all content
available so hide the loading... div", which use case requires the
google ads are loaded too.

Jim.

Matt Kruse 01-21-2006 09:38 PM

Re: fixing Google AdSense
 
Jim Ley wrote:
> Your better bet is to just avoid doing stuff onload - there's very
> little that's relevant to onload other than doing "is all content
> available so hide the loading... div", which use case requires the
> google ads are loaded too.


A lot of "unobtrusive javascript" techniques wait until the page is loaded
to then go back and alter the page contents with extended js functionality.

The alternative is to just load the script at the bottom of the page after
your content, but
1) Loading all scripts in the <head> is cleaner
and
2) There is no spec that says the DOM objects must be available to script as
soon as they are parsed, so waiting until the document is loaded and
available is the best approach

Or do you have a differing opinion?

--
Matt Kruse
http://www.JavascriptToolbox.com
http://www.AjaxToolbox.com




All times are GMT. The time now is 08:12 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.