Google Announces Chrome OS PCWorld CategoriesGet PCWorld's Digital Editions
dominates the search engine marketWeb-based e-mail marketAndroidGoogle has upped the ante it used with its browsersmartbooksremarked in my review
Close Ad
document.write('
consent.ads.queue.push(function()
try
IDG.GPT.addDisplayedAd("gpt-superstitial", "true");
$('#gpt-superstitial').responsiveAd(screenSize:'971 1115', scriptTags: []);
IDG.GPT.log("Creating ad: gpt-superstitial [971 1115]");
catch (exception)
console.log("Error with IDG.GPT: " + exception);
);
Home
$(document).ready(function()
$('.searchbox-input-class').each(function()
$(this).change(function()
var qStr=$(this).val();
if($(this).val().indexOf('@')!=-1)
qStr=qStr.replace(/@/g,' ');
$(this).val(qStr);
);
);
);
$(document).ready(function()
var fullDate = "July 07, 2009 10:36 PM";
document.querySelector(".format-date").textContent = fullDate;
);
consent.ads.queue.push(function()
$.getScript( "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js" )
.done(function( script, textStatus )
//need to add && publisherConsents.gdprApplies back to the end of this conditional after testing
if (!consent.personalization && consent.isEU)
(adsbygoogle=window.adsbygoogle
else
(adsbygoogle = window.adsbygoogle
)
.fail(function( jqxhr, settings, exception )
console.log( "Triggered ajaxError handler." );
);
);
Google's New OS
Google Announces Chrome OS
try
performance.mark("mark_headline_rendered");
catch(e)
console.log("Error saving performance mark -- this function may not be supported in this browser");
consent.ads.queue.push(function()
try
IDG.GPT.addDisplayedAd("gpt-leaderboard", "true");
$('#gpt-leaderboard').responsiveAd(screenSize:'971 1115', scriptTags: []);
IDG.GPT.log("Creating ad: gpt-leaderboard [971 1115]");
catch (exception)
console.log("Error with IDG.GPT: " + exception);
);
consent.ads.queue.push(function()
try
IDG.GPT.addDisplayedAd("gpt-leaderboardmobile", "true");
$('#gpt-leaderboardmobile').responsiveAd(screenSize:'971 1115', scriptTags: []);
IDG.GPT.log("Creating ad: gpt-leaderboardmobile [971 1115]");
catch (exception)
console.log("Error with IDG.GPT: " + exception);
);
consent.ads.queue.push(function()
if($(window).width() >= 930)
IDG.GPT.addDisplayedAd("gpt-showcase", "true");
$('#gpt-showcase').responsiveAd(screenSize:'971 1115', scriptTags: []);
IDG.GPT.log("Creating ad: gpt-showcase - [971 1115]");
);
#drr-container figure.large.video
border-bottom: 0 none;
figure#page-lede.thm-gallery.rr-gallery-vid #bcplayer-gallery #bcplayer-gallery_ad > div
width: 300px !important;
height: 169px !important;
transition: all 0.5s ease;
figure#page-lede.thm-gallery #bcplayer-gallery #bcplayer-gallery_ad > div
width: 100%;
height: 100%;
transition: all 0.5s ease;
.jwplayer.jw-state-paused .jw-display
display: table !important;
padding: 0;
.jwplayer .jw-display-icon-container
float: none;
padding: 0;
margin: 0;
.jw-flag-small-player .jw-display
padding-top: 0px;
.jwplayer .jw-display-icon-container .jw-icon-rewind
visibility: hidden;
.jwplayer .jw-display-icon-container .jw-icon-display .jw-svg-icon-play path,
.jw-state-idle .jw-svg-icon-play path,
.jwplayer .jw-display-icon-container .jw-icon-display .jw-svg-icon-replay path,
.jw-state-complete .jw-svg-icon-replay path
display: none;
.jwplayer .jw-display-icon-container .jw-icon-display .jw-svg-icon-play,
.jw-state-idle .jw-svg-icon-play,
.jwplayer .jw-display-icon-container .jw-icon-display .jw-svg-icon-replay,
.jw-state-complete .jw-svg-icon-replay
background-size: contain;
background-repeat: no-repeat;
background-color: transparent;
background-image: url(//idge.staticworld.net/idgtv/btn-play-default.svg);
background-position: center center;
bottom: 0;
border-radius: 0;
box-shadow: none;
left: 0;
margin: auto;
right: 0;
top: 0;
.jwplayer .jw-display-icon-container .jw-icon,
.jwplayer .jw-display-icon-container .jw-icon-display .jw-svg-icon-play,
.jw-state-idle .jw-svg-icon-play,
.jwplayer .jw-display-icon-container .jw-icon-display .jw-svg-icon-replay,
.jw-state-complete .jw-svg-icon-replay
height: 81px;
width: 78px;
.thm-gallery.rr-gallery-vid .jwplayer .jw-display-icon-container .jw-icon,
.thm-gallery.rr-gallery-vid .jwplayer .jw-display-icon-container .jw-icon-display .jw-svg-icon-play,
.thm-gallery.rr-gallery-vid .jw-state-idle .jw-svg-icon-play,
.thm-gallery.rr-gallery-vid .jwplayer .jw-display-icon-container .jw-icon-display .jw-svg-icon-replay,
.thm-gallery.rr-gallery-vid .jw-state-complete .jw-svg-icon-replay
height: 65px;
width: 62px;
consent.ads.queue.push(function()
IDG.GPT.addDisplayedAd("inread", "true");
IDG.GPT.displayGoogleTagSlot('inread');
);
Google's New OS
Google Announces Chrome OS
FAQ: Google Chrome OS
Will Google's OS Make the Desktop Safe?
Google Lists HP, Acer Among Chrome OS...
Google’s Chrome OS: Not the first...
With OS Project, Is Google...
Google's Chrome OS May Fail Even as It...
5 Ways Microsoft Will Bring the Hurt to...
Is Chrome OS The Future Of Computing? I...
function showAllCollectionItems()
$('#collection-module-top .collection-item').show();
$('#collection-module-top .collection-show-all').hide();
var dataLayer = window.dataLayer = window.dataLayer || [];
dataLayer.push(
'event': 'loadTopCollectionModule'
);
$(document).ready(function()
$('.articleBloxAd').filter( ":visible" ).each(function(index, item)
var id = $(item).attr('id');
var divClass = $(item).attr('class');
var adString = IDG.GPT.getLazyAdCode();
$(item).replaceWith("
" + adString + "
"););
try
$("div.lazyload_blox_ad").lazyLoadAd(
threshold : 0, // You can set threshold on how close to the edge ad should come before it is loaded. Default is 0 (when it is visible).
forceLoad : false, // Ad is loaded even if not visible. Default is false.
onLoad : false, // Callback function on call ad loading
onComplete : false, // Callback function when load is loaded
timeout : 1500, // Timeout ad load
debug : false, // For debug use : draw colors border depends on load status
xray : false // For debug use : display a complete page view with ad placements
) ;
catch (exception)
console.log("error loading lazyload_ad " + exception);
);
$(function()
var MOBILE_BREAK = 929;
if ($(window).width() -1)
articleDRRModuleList.splice(dealpostsIdx, 1);
adPositions = [0, 1, 2, 4];
for (var i=0; i p:eq(7)").index();
$("#drr-container").children().slice(0, firstModIndex).each(function()
placementTarget += $(this).height();
);
// Define first mobile ad here so imu counter shows imu1 first imu2 second, etc.
var firstMobileAdHtml = getLazyLoadAdHtml();
// Place Right-rail div containers
$("#drr-container").children().each(function(index,value)
//ignore any hidden elements in the body, like the mobile-only "read this next" module
if ($(this).is(':visible'))
if (DEBUG)
console.log($(this));
if (cumulativeHeight >= placementTarget) loopCounter >= 5)
try
IDG.GPT.addExtIMU();
var adDivString;
if (true)
adDivString = getLazyLoadAdHtml();
else
IDG.GPT.IMUCounter = IDG.GPT.IMUCounter + 1;
var slotName = IDG.GPT.getIMUSlotName(),
adString = "
$('#" + slotName + "').responsiveAd(screenSize:'971 1115', scriptTags: []);if (Object.keys(IDG.GPT.companions).length > 0) IDG.GPT.refreshAd('" + slotName + "');";
adDivString = "
adDivString = "
" + adString + "";
consent.ads.queue.push(function()IDG.GPT.defineGoogleTagSlot(slotName ,[[320,50],[300,250],[300,50]],false,true););
placementDiff = applyInsert($(this), adDivString);
if (DEBUG)
console.log("Just placed an ad and the placementDiff is: " + placementDiff);
placementTarget = cumulativeHeight + placementDiff + INTERMODULE_HEIGHT + AD_HEIGHT_BUFFER;
catch (e)
console.log("Error: "+e);
else if (moduleCounter < articleDRRModuleList.length)
var elementId = "drr-mod-"+moduleCounter;
var moduleDivString = "";
modules.push(elementId);
placementDiff = applyInsert($(this), moduleDivString);
if (DEBUG)
console.log("Just placed a module and the placementDiff is: " + placementDiff);
placementTarget = cumulativeHeight + placementDiff + INTERMODULE_HEIGHT + MODULE_HEIGHT_BUFFER;
moduleCounter++;
loopCounter++;
// Avoid placing elements too soon due to non-large figures inflating the cumulative height
if ($(this).is("figure") && !$(this).is("figure.large"))
cumulativeHeight += GRAF_HEIGHT;
else
cumulativeHeight += $(this).height() + GRAF_HEIGHT;
); // end $("#drr-container").children().each()
// clone Related Stories module to come in after eighth para in article body for mobile breakpoint display
var $relatedStories = $('.related-promo-wrapper');
if ($relatedStories.length)
var $relatedStoriesClone = $relatedStories.clone();
$relatedStoriesClone.insertAfter( "#drr-container > p:eq(7)");
// For mobile only, place zipRecruiter after 8th paragraph.
var $zipRecruiter = $('.zip-recruiter-wrapper');
if ($zipRecruiter.length)
$zipRecruiter.insertAfter( "#drr-container > p:eq(8)");
if (false)
var $dealPost = $('.dealpost-mod');
var $amazonWidget = $('#amazon-widget');
if ($dealPost.length && $amazonWidget.length)
var $dealPostClone = $dealPost.remove();
var $amazonWidgetClone = $amazonWidget.remove();
$dealPostClone.insertAfter( "#drr-container > p:eq(7)");
$amazonWidgetClone.insertAfter($dealPostClone);
// For mobile only, place ad after second paragraph.
if (firstMobileAdHtml)
$(firstMobileAdHtml).insertAfter("#drr-container > p:eq(1)");
var $insiderPromo = $('.insider-promo-wrapper');
if ($insiderPromo.length)
var $insiderPromoClone = $insiderPromo.clone();
$insiderPromoClone.insertAfter( "#drr-container > p:eq(1)");
// Add Right rail module content
var placeModule = function( data )
var placementId = $(data).filter('div').attr('data-placement-id');
$( "#"+placementId ).html( data );
;
for (i=0; i<modules.length; i++)
if (moduleUrls[i] !== undefined)
$.get(moduleUrls[i]+"&divId="+modules[i], placeModule);
$("div.lazyload_ad_article").lazyLoadAd(
threshold : 0,
forceLoad : false, // Ad is loaded even if not visible. Default is false.
onLoad : false, // Callback function on call ad loading
onComplete : false, // Callback function when load is loaded
timeout : 1500, // Timeout ad load
debug : false, // For debug use : draw colors border depends on load status
xray : false // For debug use : display a complete page view with ad placements
);
/*
* Increments imu counter and generates a 'name' based on count like imu2, imu3, etc.
* Returns the html and code script needed for the lazy load ad js.
*/
function getLazyLoadAdHtml()
try
var adString = IDG.GPT.getLazyAdCode(true);
return "
consent.ads.queue.push(function()IDG.GPT.defineGoogleTagSlot(slotName ,[[320,50],[300,250],[300,50]],false,true););
placementDiff = applyInsert($(this), adDivString);
if (DEBUG)
console.log("Just placed an ad and the placementDiff is: " + placementDiff);
placementTarget = cumulativeHeight + placementDiff + INTERMODULE_HEIGHT + AD_HEIGHT_BUFFER;
catch (e)
console.log("Error: "+e);
else if (moduleCounter < articleDRRModuleList.length)
var elementId = "drr-mod-"+moduleCounter;
var moduleDivString = "";
modules.push(elementId);
placementDiff = applyInsert($(this), moduleDivString);
if (DEBUG)
console.log("Just placed a module and the placementDiff is: " + placementDiff);
placementTarget = cumulativeHeight + placementDiff + INTERMODULE_HEIGHT + MODULE_HEIGHT_BUFFER;
moduleCounter++;
loopCounter++;
// Avoid placing elements too soon due to non-large figures inflating the cumulative height
if ($(this).is("figure") && !$(this).is("figure.large"))
cumulativeHeight += GRAF_HEIGHT;
else
cumulativeHeight += $(this).height() + GRAF_HEIGHT;
); // end $("#drr-container").children().each()
// clone Related Stories module to come in after eighth para in article body for mobile breakpoint display
var $relatedStories = $('.related-promo-wrapper');
if ($relatedStories.length)
var $relatedStoriesClone = $relatedStories.clone();
$relatedStoriesClone.insertAfter( "#drr-container > p:eq(7)");
// For mobile only, place zipRecruiter after 8th paragraph.
var $zipRecruiter = $('.zip-recruiter-wrapper');
if ($zipRecruiter.length)
$zipRecruiter.insertAfter( "#drr-container > p:eq(8)");
if (false)
var $dealPost = $('.dealpost-mod');
var $amazonWidget = $('#amazon-widget');
if ($dealPost.length && $amazonWidget.length)
var $dealPostClone = $dealPost.remove();
var $amazonWidgetClone = $amazonWidget.remove();
$dealPostClone.insertAfter( "#drr-container > p:eq(7)");
$amazonWidgetClone.insertAfter($dealPostClone);
// For mobile only, place ad after second paragraph.
if (firstMobileAdHtml)
$(firstMobileAdHtml).insertAfter("#drr-container > p:eq(1)");
var $insiderPromo = $('.insider-promo-wrapper');
if ($insiderPromo.length)
var $insiderPromoClone = $insiderPromo.clone();
$insiderPromoClone.insertAfter( "#drr-container > p:eq(1)");
// Add Right rail module content
var placeModule = function( data )
var placementId = $(data).filter('div').attr('data-placement-id');
$( "#"+placementId ).html( data );
;
for (i=0; i<modules.length; i++)
if (moduleUrls[i] !== undefined)
$.get(moduleUrls[i]+"&divId="+modules[i], placeModule);
$("div.lazyload_ad_article").lazyLoadAd(
threshold : 0,
forceLoad : false, // Ad is loaded even if not visible. Default is false.
onLoad : false, // Callback function on call ad loading
onComplete : false, // Callback function when load is loaded
timeout : 1500, // Timeout ad load
debug : false, // For debug use : draw colors border depends on load status
xray : false // For debug use : display a complete page view with ad placements
);
/*
* Increments imu counter and generates a 'name' based on count like imu2, imu3, etc.
* Returns the html and code script needed for the lazy load ad js.
*/
function getLazyLoadAdHtml()
try
var adString = IDG.GPT.getLazyAdCode(true);
return "