Search Results

Search found 19418 results on 777 pages for 'window chrome'.

Page 213/777 | < Previous Page | 209 210 211 212 213 214 215 216 217 218 219 220  | Next Page >

  • Can IIS7 execute php files?

    - by Roman
    I have IIS7 on my computer. It can display html files. But if I put a PHP program in the corresponding folder and then try to open it with the Chrome browser I do not see the expected page. Instead Chrome "downloads" this file. Is it beacuse IIS7 cannot display the PHP files?

    Read the article

  • Where can I report an issue with IIS?

    - by Nathan Taylor
    While working with an ASP.NET application on Chrome for Android I discovered that Request.Browser.Cookies returns False for that browser (despite the browser supporting cookies). Based on what I've read, this indicates a problem with the database which ASP.NET (and, I assume, IIS) uses to look up information about different UserAgents. The fact that it returns False means that the database is either missing Chrome for Android, or has invalid data for it. What is the a proper place to report IIS issues like this?

    Read the article

  • How to install couchdb on mac osx 10.6

    - by Adam
    I'm trying to install CouchDB on my mac, running snow leopard 10.6. I installed Xcode, MacPorts, and then followed the instructions here: http://wiki.apache.org/couchdb/Installing_on_OSX It all worked fine until I tried to visit the web interface: http://127.0.0.1:5984/_utils/index.html Google chrome said "Oops! Google Chrome could not connect to 127.0.0.1:5984" I tried connecting using telnet in bash and it said connection refused. Can somebody shed some light with some suggestions or perhaps and idiot-proof walkthrough?

    Read the article

  • MacOS Start FireFox via CommandLine in 32 bit

    - by Dukeatcoding
    Firefox can be startet via Commandline How can I run an application with command line arguments in Mac OS Is there an argument to make it start in 32 bit ? I know i could select it via finder, but thats no option for my problem I have solved a similar problem for chrome by creating an Automator "Launcher" which start Chrome with deactivated flash, but for that I need to know whether there is a command line argument to set 32bit. Maybe by changing systems settings by "default" ?

    Read the article

  • Gzip not working in browser

    - by Cathal
    According to whatsmyip.org none of my browsers (Firefox, Chrome etc) on W7 are gzip enabled, it's saying 'NO, your browser is not requesting compressed content' which agrees with Chrome developer tools as I was testing a site and it was complaining that the page and css etc weren't compressed. I've searched for an answer but cannot find anything for this. I've tested from another pc connected to the router and that works fine, something on this pc is broke.... Any help tia

    Read the article

  • jquery Setting cursor position in contenteditable div

    - by Mark
    The old version of the question is below, after researching more, I decided to rephrase the question. The problem as before is, I need to focus a contenteditable div without highlighting the text, doing straight up focus highlights the text in Chrome. I realize that people solved this problems in textareas by resetting the caret position in the textarea. How can I do that with a contenteditable element? All the plugins I've tried only works with textareas. Thanks. Old Phrasing of the question: I have a contenteditable element that I want to focus, but only insofar as to place the cursor at the front of the element, rather selecting everything. elem.trigger('focus'); with jquery selects all the text in the entire element in chrome. Firefox behaves correctly, setting the caret at the front of the text. How can I get Chrome to behave the way I want, or is focus perhaps not what I'm looking for. Thanks

    Read the article

  • Console.log in IE on an object just outputted [object Object]

    - by LookitsPuck
    All, I'm used to debugging JavaScript in Chrome or Firefox just because their built in developer tools are a lot cleaner than IE's. IE8 came along way with the Developer Tools being more polished, but they're still not completely up to snuff. I like being able to step through code as if I was in Visual Studio, and that is pretty nice about IE, however, when trying to do a simple console.log on an object that I have, in Firefox/Chrome/etc. I can actually explore that object. In IE, the console is simply outputting the following: LOG: [object Object] Is there any way to drill down into that object in IE like in Chrome/Firefox/etc.? Thanks all! -Steve

    Read the article

  • How to get reviews success message in magento?

    - by Raul
    How to get revies success message in magento? Array ( [core] = Array ( [_session_validator_data] = Array ( [remote_addr] = 192.168.151.102 [http_via] = [http_x_forwarded_for] = [http_user_agent] = Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4 ) [session_hosts] => Array ( [technova2] => 1 ) [messages] => Mage_Core_Model_Message_Collection Object ( [_messages:protected] => Array ( ) [_lastAddedMessage:protected] => Mage_Core_Model_Message_Success Object ( [_type:protected] => success [_code:protected] => Your review has been accepted for moderation [_class:protected] => [_method:protected] => [_identifier:protected] => [_isSticky:protected] => ) ) [just_voted_poll] => [visitor_data] => Array ( [] => [server_addr] => -1062692990 [remote_addr] => -1062693018 [http_secure] => [http_host] => technova2 [http_user_agent] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4 [http_accept_language] => en-US,en;q=0.8 [http_accept_charset] => ISO-8859-1,utf-8;q=0.7,*;q=0.3 [request_uri] => /~rahuls/sextoys/index.php/review/product/list/id/169/ [session_id] => 21bq2vtkup5m1gtghknlu1tit42c6dup [http_referer] => http://technova2/~rahuls/sextoys/index.php/review/product/list/id/169/ [first_visit_at] => 2010-06-16 05:49:56 [is_new_visitor] => [last_visit_at] => 2010-06-16 06:00:00 [visitor_id] => 935 [last_url_id] => 23558 ) [last_url] => http://technova2/~rahuls/sextoys/index.php/review/product/list/id/169/ ) [_cookie_revalidate] => 1276669711 [customer_base] => Array ( [_session_validator_data] => Array ( [remote_addr] => 192.168.151.102 [http_via] => [http_x_forwarded_for] => [http_user_agent] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4 ) [session_hosts] => Array ( [technova2] => 1 ) [id] => [messages] => Mage_Core_Model_Message_Collection Object ( [_messages:protected] => Array ( ) [_lastAddedMessage:protected] => ) ) [checkout] => Array ( [_session_validator_data] => Array ( [remote_addr] => 192.168.151.102 [http_via] => [http_x_forwarded_for] => [http_user_agent] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4 ) [session_hosts] => Array ( [technova2] => 1 ) ) [review] => Array ( [_session_validator_data] => Array ( [remote_addr] => 192.168.151.102 [http_via] => [http_x_forwarded_for] => [http_user_agent] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4 ) [session_hosts] => Array ( [technova2] => 1 ) [messages] => Mage_Core_Model_Message_Collection Object ( [_messages:protected] => Array ( ) [_lastAddedMessage:protected] => ) ) [store_default] => Array ( [_session_validator_data] => Array ( [remote_addr] => 192.168.151.102 [http_via] => [http_x_forwarded_for] => [http_user_agent] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4 ) [session_hosts] => Array ( [technova2] => 1 ) ) ) After posting the review i want to display the message: Your review has been accepted for moderation. which appears in the session array. but how to fetch it :(. please help. Thanks in advance.

    Read the article

  • How to use Vendor Properties in Multiple Backgrounds?

    - by barraponto
    I want to use multiple backgrounds in css, which are currently supported by Firefox 3.61, Chrome/Safari, supposedly Opera10.5 (doesn't run on gnu/linux). It is working fine, however i would like to use linear-gradients as a background. it works ok for Firefox, doesn't work at all with Chrome, yet i can't figure out how to make it work for both at the same time. any clues? http://snook.ca/archives/html_and_css/multiple-bg-css-gradients came the closest to match what i need, but i couldn't get it to work with chrome yet.

    Read the article

  • jquery checked checkbox IE problem

    - by lidermin
    Hi, I'm having an issue verifying if a checkbox is checked using jquery on Internet Explorer. This is the code I'm using: if ($('#chkjq_1').attr('checked') == true) It works fine on Firefox or Chrome, but on Internet Explorer 7, the condition is always false because the browser sets the property this way: <input id="chkjq_1" type="checkbox" CHECKED/> IE7 And the right way is the following: (Firefox, Chrome): <input id="chkjq_1" type="checkbox" checked="checked"/> FF, Chrome, etc What should I do to avoid this issue on Internet Explorer 7; is there a generic way in jquery to solve this? Thanks in advance.

    Read the article

  • Passing multiple arguments to a UNIX shell script

    - by Waffles
    I have the following (bash) shell script, that I would ideally use to kill multiple processes by name. #!/bin/bash kill `ps -A | grep $* | awk '{ print $1 }'` However, while this script works is one argument is passed: end chrome (the name of the script is end) it does not work if more than one argument is passed: $end chrome firefox grep: firefox: No such file or directory What is going on here? I thought the $* passes multiple arguments to the shell script in sequence. I'm not mistyping anything in my input - and I the programs I want to kill (chrome and firefox) are open. Any help is appreciated.

    Read the article

  • request payload versus query string parameters

    - by Sarah Sides
    I am absolutely in the dark when it comes to this request payload that I'm seeing in my Chrome browser. A Query string will have a variable attached like session:2g0SoEE but this payload has just one long string I'm guessing is in base64. I do understand that the request payload can have whatever, but how do I use it? Can I do a post with jquery and send this request payload? For example: $.post(url, {variable: "variable"}, function(data){}); When this posts it will send &variable=variable this will be found as query string parameter in the headers sent in chrome. In this game I'm playing I see another piece of info being sending in the header called a payload request. I'm a confused as to how this is read, used, made, how I can reduplicate this? Here is something similar: Chrome is caching an HTTP PUT request and How to retrieve Request Payload

    Read the article

  • Passing multiple aruments to a UNIX shell script

    - by Waffles
    Hello all, I have the following (bash) shell script, that I would ideally use to kill multiple processes by name. #!/bin/bash kill `ps -A | grep $* | awk '{ print $1 }'` However, while this script works is one argument is passed: end chrome (the name of the script is end) it does not work if more than one argument is passed: $end chrome firefox grep: firefox: No such file or directory What is going on here? I thought the $* passes multiple arguments to the shell script in sequence. I'm not mistyping anything in my input - and I the programs I wan to kill (chrome and firefox) are open. Any help is appreciated.

    Read the article

  • What can cause a persistent "Reload the page to get source for" error in firebug?

    - by ripper234
    I'm trying to debug the javascript of a specific page, and I keep seeing Reload the page to get source for page.htm in Firebug. On Chrome, I'm mostly able to debug the js, but sometimes I also get a blank page. What can cause such issues? I believe I always see a blank page in Chrome if I reload while the JS console is open. If I open a new Chrome tab, load the page, and then open the JS console, everything is ok. The page I'm debugging is on a localhost server (Play Framework server), although I have seen this on other pages occasionally. This only happens with inline javascript ... js that is linked from the page is displayed fine.

    Read the article

  • XML jQuery Problem

    - by Llamabomber
    This code for parsing my xml and appending via jquery seems to work great in every browser but Chrome (Mac only, the windows version of chrome works fine) and explorer. I'm not aware of any glaring issues in the code so I thought some fresh eyes might help. Anyone know what could be causing IE and Chrome on the mac to not append? <script type="text/javascript" charset="utf-8"> $(document).ready(function() { $.ajax({ type: "GET", url: "sitenav.xml", dataType: "xml", success: parseXml }); function parseXml(xml) { $(xml).find("GoogleAnalytics").each(function() { $("li#google_analytics").append('<ul><li>' + $(this).find("NavHeader").text() + '</li></ul>'); }); } }); </script>

    Read the article

  • Applescript: Tell by Variable dilemma

    - by Johnny Grass
    I would like to do this: tell application "Finder" to set appName to (application file id "com.google.Chrome") as text using terms from application appName tell application appName to get URL of active tab of first window end using terms from This doesn't work because "using terms from" requires an application name as a string constant. If i substitute this line: using terms from application appName with this one using terms from application "Google Chrome" it works. However I don't want to rely on the target machine having the application named "Google Chrome". Using the bundle identifiers seems safer. Is there a better way to do this?

    Read the article

  • Safari won't request video or audio from HTML 5 media elements?

    - by thure
    So far what I've been developing has worked in Chrome and, using fallbacks, IE8. What I don't get is this: Safari just won't start loading <video> or <audio> content. Safari 6 won't load, and neither will iOS 5's Safari: My code calls .load() on the elements at the appropriate time (at least for Chrome), so what gives? Here is the video declaration: <video width="800" height="600" class="faces" id="facesVideo"> <source src="video/grid.mp4" type="video/mp4" /> <source src="video/grid.ogv" type="video/ogg" /> </video> The audio is declared dynamically, but has the same problem. Do I need to wait for some DOM event that Chrome doesn't need before calling .load()? What does it take to get Safari to start buffering until the elements can fire canplaythrough?

    Read the article

  • How to normalize SVG path data (cross browser)?

    - by Timo
    I have tried to find a way to implement cross browser path normalizer. There IS a native way which is described here and functional example is here, but it works only in newest Opera (but not in IE, FF, Safari, Chrome). The native way uses pathElm.normalizedPathSegList and it converts all relative coordinates to absolute ones and represents all path segment types as a following subset of types: M,L,C,z. I have found only one javascript code and jsfiddled functional example of it, but it works only in IE and FF. Chrome gives "Uncaught Error: INDEX_SIZE_ERR: DOM Exception 1". How this could be fixed to work also in Opera, Safari and Chrome or is there any other way for normalizing SVG paths?

    Read the article

  • How to detect invalid user input in a Batch File?

    - by user2975367
    I want to use a batch file to ask for a password to continue, i have very simple code that works. @echo off :Begin cls echo. echo Enter Password set /p pass= if %pass%==Password goto Start :Start cls echo What would you like me to do? (Date/Chrome/Lock/Shutdown/Close) set /p task= if %task%==Date goto Task=Date if %task%==Chrome goto Task=Chrome if %task%==Lock goto Task=Lock if %task%==Shutdown goto Task=Shutdown if %task%==Close goto Task=Close I need to detect when the user entered an invalid password, i have spent an hour researching but i found nothing. I'm not advanced in any way so try and keep it very simple like the code above. Please help me.

    Read the article

  • Would it be possible for web browsers to automatically update rendering engines?

    - by unknowing
    As a way to prevent the major annoyances of browser segmentation and older versions. This way the code would only need to be done for the latest version of the browser, but users could still have the functionality of the older version and not be forced to do major updates? I am sure there will be some major flaws in this, and I would like you to tell me what they are! -Obviously, people may not want this as often auto-updating is frowned upon, however Chrome does it (or at least, they used to); Without a manual check, Chrome will update itself automatically, Google said. "Google Chrome will automatically checks for updates approximately every five hours. If an update is available, it will be downloaded and applied at the next browser restart," Google said. -there is still the problem of getting users from the really old ones onto the any new browsers that have this functionality -To prevent exploits in terms of updates, maybe they could have a 7 day opt-in period before being pushed out to everyone?

    Read the article

  • In C, during step by step debugging in a function, how can i view the content of an array in the "Autos?" window along with the other variables?

    - by AppsAndGo
    I'm using VS 2012, and I'm working on a bubble sort. After searching I found a nifty trick to see the content of the array in the "Watch 1" tab, (How to view contents of an array while debugging in Code Blocks?), but going from "watch 1" to "Autos" every step to see what's changing in the array isn't practical at all. How can i see the array content within "Autos" along side my other changing variables, where i need it to show?

    Read the article

  • C# windows service location

    - by user743246
    By using following code[C#], we can know the path where googlechrome is installed. But, this code first starts chrome.exe, then takes its path. My question is without starting chrome.exe, how can I know the path? ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "chrome.exe"; string argmnt = @"-g"; startInfo.Arguments = argmnt; String path = null; try { Process p = Process.Start(startInfo); path = p.MainModule.FileName; p.Kill(); } catch (Exception e) { return String.Empty; }

    Read the article

  • ASP.NET and HTML5 Local Storage

    - by Stephen Walther
    My favorite feature of HTML5, hands-down, is HTML5 local storage (aka DOM storage). By taking advantage of HTML5 local storage, you can dramatically improve the performance of your data-driven ASP.NET applications by caching data in the browser persistently. Think of HTML5 local storage like browser cookies, but much better. Like cookies, local storage is persistent. When you add something to browser local storage, it remains there when the user returns to the website (possibly days or months later). Importantly, unlike the cookie storage limitation of 4KB, you can store up to 10 megabytes in HTML5 local storage. Because HTML5 local storage works with the latest versions of all modern browsers (IE, Firefox, Chrome, Safari), you can start taking advantage of this HTML5 feature in your applications right now. Why use HTML5 Local Storage? I use HTML5 Local Storage in the JavaScript Reference application: http://Superexpert.com/JavaScriptReference The JavaScript Reference application is an HTML5 app that provides an interactive reference for all of the syntax elements of JavaScript (You can read more about the application and download the source code for the application here). When you open the application for the first time, all of the entries are transferred from the server to the browser (all 300+ entries). All of the entries are stored in local storage. When you open the application in the future, only changes are transferred from the server to the browser. The benefit of this approach is that the application performs extremely fast. When you click the details link to view details on a particular entry, the entry details appear instantly because all of the entries are stored on the client machine. When you perform key-up searches, by typing in the filter textbox, matching entries are displayed very quickly because the entries are being filtered on the local machine. This approach can have a dramatic effect on the performance of any interactive data-driven web application. Interacting with data on the client is almost always faster than interacting with the same data on the server. Retrieving Data from the Server In the JavaScript Reference application, I use Microsoft WCF Data Services to expose data to the browser. WCF Data Services generates a REST interface for your data automatically. Here are the steps: Create your database tables in Microsoft SQL Server. For example, I created a database named ReferenceDB and a database table named Entities. Use the Entity Framework to generate your data model. For example, I used the Entity Framework to generate a class named ReferenceDBEntities and a class named Entities. Expose your data through WCF Data Services. I added a WCF Data Service to my project and modified the data service class to look like this:   using System.Data.Services; using System.Data.Services.Common; using System.Web; using JavaScriptReference.Models; namespace JavaScriptReference.Services { [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)] public class EntryService : DataService<ReferenceDBEntities> { // This method is called only once to initialize service-wide policies. public static void InitializeService(DataServiceConfiguration config) { config.UseVerboseErrors = true; config.SetEntitySetAccessRule("*", EntitySetRights.All); config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; } // Define a change interceptor for the Products entity set. [ChangeInterceptor("Entries")] public void OnChangeEntries(Entry entry, UpdateOperations operations) { if (!HttpContext.Current.Request.IsAuthenticated) { throw new DataServiceException("Cannot update reference unless authenticated."); } } } }     The WCF data service is named EntryService. Notice that it derives from DataService<ReferenceEntitites>. Because it derives from DataService<ReferenceEntities>, the data service exposes the contents of the ReferenceEntitiesDB database. In the code above, I defined a ChangeInterceptor to prevent un-authenticated users from making changes to the database. Anyone can retrieve data through the service, but only authenticated users are allowed to make changes. After you expose data through a WCF Data Service, you can use jQuery to retrieve the data by performing an Ajax call. For example, I am using an Ajax call that looks something like this to retrieve the JavaScript entries from the EntryService.svc data service: $.ajax({ dataType: "json", url: “/Services/EntryService.svc/Entries”, success: function (result) { var data = callback(result["d"]); } });     Notice that you must unwrap the data using result[“d”]. After you unwrap the data, you have a JavaScript array of the entries. I’m transferring all 300+ entries from the server to the client when the application is opened for the first time. In other words, I transfer the entire database from the server to the client, once and only once, when the application is opened for the first time. The data is transferred using JSON. Here is a fragment: { "d" : [ { "__metadata": { "uri": "http://superexpert.com/javascriptreference/Services/EntryService.svc/Entries(1)", "type": "ReferenceDBModel.Entry" }, "Id": 1, "Name": "Global", "Browsers": "ff3_6,ie8,ie9,c8,sf5,es3,es5", "Syntax": "object", "ShortDescription": "Contains global variables and functions", "FullDescription": "<p>\nThe Global object is determined by the host environment. In web browsers, the Global object is the same as the windows object.\n</p>\n<p>\nYou can use the keyword <code>this</code> to refer to the Global object when in the global context (outside of any function).\n</p>\n<p>\nThe Global object holds all global variables and functions. For example, the following code demonstrates that the global <code>movieTitle</code> variable refers to the same thing as <code>window.movieTitle</code> and <code>this.movieTitle</code>.\n</p>\n<pre>\nvar movieTitle = \"Star Wars\";\nconsole.log(movieTitle === this.movieTitle); // true\nconsole.log(movieTitle === window.movieTitle); // true\n</pre>\n", "LastUpdated": "634298578273756641", "IsDeleted": false, "OwnerId": null }, { "__metadata": { "uri": "http://superexpert.com/javascriptreference/Services/EntryService.svc/Entries(2)", "type": "ReferenceDBModel.Entry" }, "Id": 2, "Name": "eval(string)", "Browsers": "ff3_6,ie8,ie9,c8,sf5,es3,es5", "Syntax": "function", "ShortDescription": "Evaluates and executes JavaScript code dynamically", "FullDescription": "<p>\nThe following code evaluates and executes the string \"3+5\" at runtime.\n</p>\n<pre>\nvar result = eval(\"3+5\");\nconsole.log(result); // returns 8\n</pre>\n<p>\nYou can rewrite the code above like this:\n</p>\n<pre>\nvar result;\neval(\"result = 3+5\");\nconsole.log(result);\n</pre>", "LastUpdated": "634298580913817644", "IsDeleted": false, "OwnerId": 1 } … ]} I worried about the amount of time that it would take to transfer the records. According to Google Chome, it takes about 5 seconds to retrieve all 300+ records on a broadband connection over the Internet. 5 seconds is a small price to pay to avoid performing any server fetches of the data in the future. And here are the estimated times using different types of connections using Fiddler: Notice that using a modem, it takes 33 seconds to download the database. 33 seconds is a significant chunk of time. So, I would not use the approach of transferring the entire database up front if you expect a significant portion of your website audience to connect to your website with a modem. Adding Data to HTML5 Local Storage After the JavaScript entries are retrieved from the server, the entries are stored in HTML5 local storage. Here’s the reference documentation for HTML5 storage for Internet Explorer: http://msdn.microsoft.com/en-us/library/cc197062(VS.85).aspx You access local storage by accessing the windows.localStorage object in JavaScript. This object contains key/value pairs. For example, you can use the following JavaScript code to add a new item to local storage: <script type="text/javascript"> window.localStorage.setItem("message", "Hello World!"); </script>   You can use the Google Chrome Storage tab in the Developer Tools (hit CTRL-SHIFT I in Chrome) to view items added to local storage: After you add an item to local storage, you can read it at any time in the future by using the window.localStorage.getItem() method: <script type="text/javascript"> window.localStorage.setItem("message", "Hello World!"); </script>   You only can add strings to local storage and not JavaScript objects such as arrays. Therefore, before adding a JavaScript object to local storage, you need to convert it into a JSON string. In the JavaScript Reference application, I use a wrapper around local storage that looks something like this: function Storage() { this.get = function (name) { return JSON.parse(window.localStorage.getItem(name)); }; this.set = function (name, value) { window.localStorage.setItem(name, JSON.stringify(value)); }; this.clear = function () { window.localStorage.clear(); }; }   If you use the wrapper above, then you can add arbitrary JavaScript objects to local storage like this: var store = new Storage(); // Add array to storage var products = [ {name:"Fish", price:2.33}, {name:"Bacon", price:1.33} ]; store.set("products", products); // Retrieve items from storage var products = store.get("products");   Modern browsers support the JSON object natively. If you need the script above to work with older browsers then you should download the JSON2.js library from: https://github.com/douglascrockford/JSON-js The JSON2 library will use the native JSON object if a browser already supports JSON. Merging Server Changes with Browser Local Storage When you first open the JavaScript Reference application, the entire database of JavaScript entries is transferred from the server to the browser. Two items are added to local storage: entries and entriesLastUpdated. The first item contains the entire entries database (a big JSON string of entries). The second item, a timestamp, represents the version of the entries. Whenever you open the JavaScript Reference in the future, the entriesLastUpdated timestamp is passed to the server. Only records that have been deleted, updated, or added since entriesLastUpdated are transferred to the browser. The OData query to get the latest updates looks like this: http://superexpert.com/javascriptreference/Services/EntryService.svc/Entries?$filter=(LastUpdated%20gt%20634301199890494792L) If you remove URL encoding, the query looks like this: http://superexpert.com/javascriptreference/Services/EntryService.svc/Entries?$filter=(LastUpdated gt 634301199890494792L) This query returns only those entries where the value of LastUpdated > 634301199890494792 (the version timestamp). The changes – new JavaScript entries, deleted entries, and updated entries – are merged with the existing entries in local storage. The JavaScript code for performing the merge is contained in the EntriesHelper.js file. The merge() method looks like this:   merge: function (oldEntries, newEntries) { // concat (this performs the add) oldEntries = oldEntries || []; var mergedEntries = oldEntries.concat(newEntries); // sort this.sortByIdThenLastUpdated(mergedEntries); // prune duplicates (this performs the update) mergedEntries = this.pruneDuplicates(mergedEntries); // delete mergedEntries = this.removeIsDeleted(mergedEntries); // Sort this.sortByName(mergedEntries); return mergedEntries; },   The contents of local storage are then updated with the merged entries. I spent several hours writing the merge() method (much longer than I expected). I found two resources to be extremely useful. First, I wrote extensive unit tests for the merge() method. I wrote the unit tests using server-side JavaScript. I describe this approach to writing unit tests in this blog entry. The unit tests are included in the JavaScript Reference source code. Second, I found the following blog entry to be super useful (thanks Nick!): http://nicksnettravels.builttoroam.com/post/2010/08/03/OData-Synchronization-with-WCF-Data-Services.aspx One big challenge that I encountered involved timestamps. I originally tried to store an actual UTC time as the value of the entriesLastUpdated item. I quickly discovered that trying to work with dates in JSON turned out to be a big can of worms that I did not want to open. Next, I tried to use a SQL timestamp column. However, I learned that OData cannot handle the timestamp data type when doing a filter query. Therefore, I ended up using a bigint column in SQL and manually creating the value when a record is updated. I overrode the SaveChanges() method to look something like this: public override int SaveChanges(SaveOptions options) { var changes = this.ObjectStateManager.GetObjectStateEntries( EntityState.Modified | EntityState.Added | EntityState.Deleted); foreach (var change in changes) { var entity = change.Entity as IEntityTracking; if (entity != null) { entity.LastUpdated = DateTime.Now.Ticks; } } return base.SaveChanges(options); }   Notice that I assign Date.Now.Ticks to the entity.LastUpdated property whenever an entry is modified, added, or deleted. Summary After building the JavaScript Reference application, I am convinced that HTML5 local storage can have a dramatic impact on the performance of any data-driven web application. If you are building a web application that involves extensive interaction with data then I recommend that you take advantage of this new feature included in the HTML5 standard.

    Read the article

< Previous Page | 209 210 211 212 213 214 215 216 217 218 219 220  | Next Page >