Method and apparatus for defeating a mechanism that blocks windows6968507Abstract In one embodiment, a computer program blocks windows categorized as bad windows, while allowing windows categorized as good windows to be displayed. The computer program may categorize a window by consulting one or more lists. In one embodiment, a list may be updated from time to time to optimize the computer program and prevent program-obsolescence. Techniques for defeating a window-blocking mechanism are also disclosed. In one embodiment, a computer program detects if a window is of a type that offers a product to a user. If so, the computer program provides a separate window containing information regarding the product. In one embodiment, a computer program detects if a user has a need for the computer program. If so, the user is informed of the efficacy of the computer program, which is then offered to the user. Claims 1. A method for displaying a window in a computer, the method to be performed by computer-readable program code and comprising: Description BACKGROUND OF THE INVENTION
In one embodiment, rules list 310 also includes rules for determining whether a window is a good window. Good window rules take priority over bad window rules; that is, a window that is deemed to be a good window is allowed to be displayed even if that window is deemed to be bad. For example, a window that has no menu bar or tool bar will be displayed if that window is deemed to be a good window. The use of good window rules, although not necessary to the present invention, allows a window-blocking computer program to be optimized. That is, instead of indiscriminately blocking all kinds of bad windows, good window rules allow for exceptions that help fine tune the window blocking process. Therefore, classifying a window as a good window (using good window rules) or as a bad window (using bad window rules) allows for the blocking of the right amount and type of window for a given application. In one embodiment, rules list 310 includes a rule that a new window initiated by the user is deemed to be a good window. This rule is referred to as the "user-initiated" rule. Examples of user-initiated windows include those launched when the user clicks on a hyperlink, selects to open a new window from a menu, interacts with a hyperlink, etc. The user-initiated rule allows bad windows to be blocked while minimizing interference with a user's normal browsing activities. A user may initiate a new window by clicking on an element of an HTML document such as, for example, a hyperlink. The hyperlink may be in the form of a button or highlighted text. When the user clicks on a hyperlink, a new window is launched and allowed to be displayed. In the Internet Explorer™ web browser, for example, web browser API 304 may register with an HTML document displayed on a window as soon as a NavigateComplete event notification is received from the web browser. This allows hooking into the HTML document. Thereafter, when the user clicks on the HTML document, listener 306 would get notification of the clicking event and, in version 5 or higher of the Internet Explorer™ web browser, the element that the user clicked on. The URL associated with the clicked element is stored in a window cache 316, and then compared to the URL of any new window. When the URL of a new window matches that of an element previously clicked on by the user, the new window is deemed to be a user-initiated window and accordingly not blocked. In situations where the URL of an element is not detectable (e.g., when the element calls a script), any new window launched within a short period of time (e.g., two seconds) after the user clicked on the element is deemed to be a user-initiated window and accordingly not blocked. A user may initiate a new window from a menu choice. In the Internet Explorer™ web browser, for example, pointing the cursor on a hyperlink and pressing the right mouse button displays a menu which includes a selection choice that reads: "Open In New Window". Selecting "Open In New Window" launches a new window that is allowed to be displayed. The user may also initiate a new window by interacting with a hyperlink. In the Internet Explorer™ web browser, for example, placing a cursor on a hyperlink displays on a status bar (e.g., see status bar 406 of FIG. 4) the URL pointed to by the hyperlink. URLs appearing on the status bar may be temporarily stored on window cache 316. When a URL appears on the status bar, window analyzer 308 presumes that the user is interested in any window navigating to that URL. Accordingly, new windows navigating to URLs that previously appeared on the status bar are deemed to be user-initiated and allowed to be displayed. In one embodiment, rules list 310 includes a rule that a new window appearing when the main browser window has not changed for some time (e.g., 30 seconds) is deemed to be a good window. The amount of time for waiting for the changing of the main browser window may be varied depending on implementation. This rule is based on the assumption that most bad windows appear shortly after a user has navigated to a web site. If the user has not been navigating to other web sites, as is the case when the main browser window has not changed for some time, there is a good chance that any new window is probably user-initiated and should not be blocked. In one embodiment, rules list 310 includes a rule that a new window appearing again after it was recently blocked is deemed to be a good window. The idea behind this rule, referred to as the "two-times-in-a-row rule", is that a window appearing again a second time within a predetermined period (e.g., 10 seconds) may be a user-initiated window that was inadvertently blocked; the amount of time for waiting for the launching of the second window may be varied depending on implementation. One way of determining whether two windows are the same is by examining their URLs. If two windows have the same URL, window analyzer 308 presumes the two windows to be the same. The two-times-in-a-row rule works as a back-up mechanism to the user-initiated rule, further optimizing the blocking of bad windows while minimizing impact to normal user activity. The two-times-in-a-row rule may be removed in applications where it allows too many bad windows to be displayed. The two-times-in-a-row rule may also be removed in applications where the user-initiated rule is quite effective in detecting user-initiated windows. In one embodiment, rules list 310 includes a rule that new windows containing a password or login field are deemed to be good windows and, accordingly, are not blocked. In one embodiment, rules list 310 includes a rule that new windows originating from a secure domain are deemed to be good windows and, accordingly, are not blocked. One way of identifying a secure domain is by the scheme portion of its URL. As is well know, a URL can be broken down into the following parts:
As shown in FIG. 3, a memory 203A may also include an exclusion list 312. An exclusion list 312 may be a text file stored in a mass storage device and then loaded into a memory 203A, for example. An exclusion list 312 may be in any computer-readable format or data structure. Advantageously, an exclusion list 312 is implemented as a separate module so that it may be updated without having to update the entirety of a computer program employing the list. In one embodiment, exclusion list 312 includes a list of domain names (e.g., www.store.com/. . . ) where bad windows will not be blocked regardless of the rules in rules list 310. That is, exclusion list 312 takes priority over rules list 310. This allows all types of windows, whether good or bad, from a particular domain to be displayed. For example, if www.store.com is on exclusion list 312, the blocking of bad windows is disabled when the user is browsing anywhere in the domain of www.store.com. In one embodiment, exclusion list 312 includes a locally-managed exclusion list 312A and a remotely-managed exclusion list 312B. Exclusion list 312A includes a list of domain names entered by a user. As can be appreciated, exclusion list 312A provides the user some control on the window-blocking process. The user may enter a domain name into exclusion list 312A several ways; the manner in which domain names are entered into an exclusion list does not affect the efficacy of the present invention . One way is to present a menu to the user when she right-clicks (i.e., presses the right mouse button) on a web page. Referring to FIG. 6A, a menu 601 is displayed when the user right-clicks on a web page 602. Selecting choice 603 from menu 601 adds the domain name of web page 602 to exclusion list 312A. A dialog box may also be used for adding or removing a domain name from exclusion list 312A. Such a dialog box may be invoked by selecting choice 604 from menu 601, for example. Referring to FIG. 6B, a dialog box 611 includes a text box 612 listing all domain names in exclusion list 312A. Selecting a domain name from text box 612 and clicking on delete button 614 will remove the selected domain name from exclusion list 312A (and from text box 612). Clicking on add button 613 brings up a dialog box 621 shown in FIG. 6C, where a domain name to be added may be entered on text input field 622. The entered domain name is added to exclusion list 312A and appears on text box 612. Remotely-managed exclusion list 312B includes a list of domain names downloadable from a support server computer 103. Window-blocking is not performed in domains included in an exclusion list 312B. This allows a vendor (who may be the operator of a support server computer 103) to offer a window-blocking computer program at no cost to users, so long as the program does not block windows from the vendor or partner web sites. That is, a vendor may choose to include in an exclusion list 312B domain names of partners who may be subsidizing the development and maintenance of the window-blocking computer program. As can be appreciated, a window-blocking computer program in accordance with the present invention will still block a substantial amount of bad windows even with a remotely-managed exclusion list 312B. The window-blocking computer program will block a substantial amount of bad windows, while displaying a relatively small amount of its own windows in return. Of course, exclusion list 312A and/or 312B may be omitted from memory 203A depending on implementation. As shown in FIG. 3, memory 203A further includes a support server interface 314. Support server interface 314 includes computer-readable program code for communicating with a support server computer 103. A window cache 316 provides a general buffer area where status bar information, window characteristics, URLs, values, HTML code of a web page, etc. may be temporarily stored. A scorekeeper 318 includes computer-readable program code for gathering statistical information. Examples of statistical information tracked by scorekeeper 318 include the number of windows that have been blocked and the domains where windows have been blocked. A UI manager 320 includes computer-readable program code for presenting various user interface components such as dialog boxes, message boxes, menus etc. to users. Referring now to FIG. 7, there is shown a flow diagram of a method for processing windows in accordance with an embodiment of the present invention. In action 702, listener 306 receives an event notification from web browser 302 that a new window is opening up. In action 704, the window is prevented from being displayed while window analyzer 308 examines the window. This gains some time for window analyzer 308, and also prevents the window from flickering in and out of the user's view if it turns out to be a bad window that has to be blocked. The window may be prevented from being displayed by turning OFF its visibility attribute. Another way is to move the window to a screen location not viewable by a user (e.g., move the window off-screen). Continuing in action 706, window analyzer 308 consults an exclusion list 312 (i.e., 312A and/or 312B) to determine if the window is navigating to a domain where window blocking is not allowed. Because the window may be redirected to another domain on its way to its intended domain, window analyzer 308 also checks the domain where the window ended up to check if it is in an exclusion list 312. In actions 708 and 714, the window is allowed to be displayed if it is on a domain included in an exclusion list 312. The window may be displayed by turning ON its visibility attribute and/or moving it back to its intended screen location. In actions 709 and 714, the window is allowed to be displayed if window analyzer 308 determines that it is a good window. In actions 710 and 712, the window is blocked if window analyzer 308 determines that it is a bad window. One way of blocking the window is to invoke a browser method to close the window. Another way of blocking the window is to hide it away from the user's view by keeping it invisible or off-screen. Hiding the window, instead of closing it, is preferable in applications where the user may want to review a list of blocked windows and selectively view those that are of interest to her. For example, a blinking tray icon such as icon 801 of FIG. 8 may be displayed to alert the user that bad windows have been blocked at the domain indicated in address window 405. Clicking on icon 801 may then bring up a dialog box (not shown) listing all the bad windows that have been blocked; clicking on a listed blocked window would then allow that window to be displayed. Techniques for Defeating A Window-Blocking Mechanism A technique for defeating window-blocking mechanisms (e.g., a window-blocking computer program) is generally desirable to those who deliver messages to users via pop-ups, pop-unders, and other types of windows. Such a technique may be implemented as computer-readable program code, referred to herein as "defeat code". The defeat code may be included in a web page, Java™ script, or Visual Basic™ script, for example. The defeat code may also be part of a computer program. As can be appreciated, a defeat mechanism may also be implemented in hardware or firmware. One way of defeating window-blocking computer programs is to identify such programs and include them in a product list 322 (see FIG. 3). A human researcher may identify window-blocking computer programs by independent testing, reading trade journals, searching the Internet for information, etc. The names of the window-blocking computer programs, which may include their respective file names, are then entered into a product list 322. Product list 322 may then be installed on a client computer 101. Product list 322 may be updated from time to time to include newly identified window-blocking computer programs. In one embodiment, a defeat mechanism searches a client computer 101 for the presence of window-blocking computer programs identified in a product list 322. Of course, information in a product list 322 may also be embedded in a defeat code. When a window-blocking computer program is found, the defeat mechanism may then disable the program by initiating an uninstall, for example. The user's permission may be required for every window-blocking computer program to be disabled. The window-blocking computer program may also be disabled by closing the program or removing/altering its components such as registry entries, settings, configuration files, modules, and data files. In one embodiment, a defeat mechanism may make a window-blocking computer program look like its malfunctioning to make the user uninstall the window-blocking computer program. For example, the defeat mechanism may indiscriminately close any new window to make the user believe that the window-blocking computer program is malfunctioning. In one embodiment, a defeat mechanism incorporates a non-functional attribute to a window for the purpose of defeating a window-blocking computer program. In the present disclosure, the term "non-functional" includes that which is unnecessary, hidden, or dummy. For example, a defeat mechanism may launch a window with a non-functional menu bar or tool bar. That is, the defeat mechanism may incorporate a menu bar (or tool bar) to a window even though it does not provide any real function. In one embodiment, a defeat mechanism launches a window multiple times for the purpose of defeating a window-blocking computer program. In one embodiment, a defeat mechanism incorporates a non-functional field to a window for the purpose of defeating a window-blocking computer program. For example, a defeat mechanism may launch a window with a non-functional password field or login field (or the word "password" or "login", for example). That is, the defeat mechanism may incorporate a password field or login field to a window even though the window does not require a password or users to login. In one embodiment, a defeat mechanism repeatedly turns ON the visibility attribute of a window for the purpose of defeating a window-blocking computer program. For example, a defeat mechanism may turn ON the visibility attribute of a window several times a second. In one embodiment, a defeat mechanism repeatedly positions a window in a screen location viewable by a user for the purpose of defeating a window-blocking computer program. For example, a defeat mechanism may move the window to the same screen location several times a second. In one embodiment, a defeat mechanism waits for a predetermined amount of time (e.g., 30 seconds) before launching a new window for the purpose of defeating a window-blocking computer program. The amount of time for waiting for the launching of a new window may be varied depending on implementation. For example, a defeat mechanism may delay the launching of a new window in order to make a window-blocking computer program assume that the new window is a user-initiated window. In one embodiment, a defeat mechanism uses part of a domain name within the URL of a window for the purpose of defeating a window-blocking computer program. For example, when at "hooray.com", a window served from a server other than a hooray.com server may have a URL that reads:
In one embodiment, a defeat mechanism intercepts an event to close a window. Instead of letting the window close, the defeat mechanism hides the window or moves it off screen. Thereafter, the defeat mechanism launches a bad window. This technique will defeat window-blocking computer programs that look for bad windows launched when a user exits a web site or web page, for example. In one embodiment, a defeat mechanism momentarily changes the status bar of a browser to reflect a bad window's URL. This technique will defeat window-blocking computer programs that monitor the status bar. In one embodiment, a defeat mechanism inputs keystroke combinations into the browser or triggers mouse events to fool a window-blocking computer program into believing that a bad window is user-initiated. In one embodiment, a defeat mechanism sets the title of a bad window such that a window-blocking computer program that examines the title bar is defeated. For example, if a window-blocking computer program does not block windows whose title bar reflects "yahoo", the defeat mechanism may change the title bar of a bad window to "yahoo" whether or not the bad window is served from a yahoo.com server. In one embodiment, a defeat mechanism uses a single web server computer having a rotating list of messages (e.g., advertisements) to serve a bad window. Successive calls to the same URL would thus result in different messages being displayed in different windows having the same URL. This technique will defeat window-blocking computer programs that employ a two-times-in-a-row rule. In one embodiment, a defeat mechanism serves bad windows from a secure domain to defeat window-blocking computer programs that allow all windows from secure domains. For example, a defeat mechanism may originate bad windows from an SSL server. In one embodiment, a defeat mechanism alters an exclusion list or rules list of a window-blocking computer program to defeat the program. For example, a defeat mechanism may surreptitiously include a domain name in an exclusion list or a rule in the rules list. The defeat mechanism may also surreptitiously remove or replace a list employed by a window-blocking computer program. In one embodiment, a defeat mechanism displays messages on a window that is not detectable or hookable using a conventional browser API (i.e., browser API commercially available for a specific browser). For example, a defeat mechanism may launch a non-browser window (e.g., a normal window object), and embed a browser control in the window. The defeat mechanism may then turn OFF an attribute commonly known as "RegisterAsBrowser" to prevent other programs, such as a window-blocking computer program, from detecting the window or closing the window by hooking into the embedded browser control. In one embodiment, a defeat mechanism displays a message in a window created using proprietary programming techniques to prevent other programs, such as a window-blocking computer program, from detecting or influencing the window. For example, instead of directly using HTML with a browser application or control, a custom HTML display engine may be used to interpret HTML code to build a graphical display for a message. Because the resulting graphical display is not a browser application and does not include an embedded browser control, it cannot be influenced using conventional browser API. The defeat mechanism may also use a proprietary language, instead of HTML, to create a window. In one embodiment, a defeat mechanism displays messages on the same window in-between navigations to defeat a window-blocking computer program. For example, a message may be displayed on a main browser window. When a user clicks a hyperlink to go to another web page, the defeat mechanism may then display another message on the same main browser window for a few seconds before navigating to the new web page. This prevents a window-blocking computer program from suppressing the message. Information Regarding Other Computer Programs In accordance with an embodiment of the present invention, window analyzer 308 may further include computer-readable program code for identifying windows that offer products to users (hereinafter "product-offering windows"). In some embodiments of the present invention, product-offering windows are deemed to be good windows and not blocked by window analyzer 308. In one embodiment, window analyzer 308 determines whether a window is offering a downloadable program by searching the content of the window for text strings such as "download" or a company/product name. Window analyzer 308 may also look for the presence of authentication information such as a digital certificate and associated CLSID (Class ID) in the HTML code of the window. As is well known, a CLSID is a universally unique identifier (UUID) that identifies a type of Component Object Model (COM) object. Each type of COM object item has its CLSID in the registry so that it can be loaded and used by other applications. For example, a spreadsheet may create worksheet items, chart items, and macrosheet items. Each of these item types has its own CLSID that uniquely identifies it to the system. In this embodiment of the present invention, CLSIDs are used to identify an installable computer program that may be offered through a browser for download and installation. As shown in FIG. 3, a memory 203A may further include a product list 322 containing a list of computer programs and their respective CLSIDs. Product list 322 may be a text file stored in a mass storage device and then loaded into a memory 203A, for example. Product list 322 may be in any computer-readable format or data structure. Advantageously, product list 322 is implemented as a separate module so that it may be updated without having to update the entirety of a computer program employing product list 322. In one embodiment, product list 322 includes a description of computer programs to aid users in deciding whether they should install a computer program being offered to them. The descriptions may be gathered by a human researcher by reading other reviews of the computer program or by independent testing. Thereafter, the descriptions are entered into a product list 322, where they are matched with corresponding CLSIDs. Product list 322 may be updated from time to time by downloading a new product list 322 from a support server computer 103. FIG. 9A schematically illustrates a dialog box 901 offering a downloadable computer program to a user. From a CLSID included in the HTML code that generated dialog box 901, window analyzer 308 detects dialog box 901 as offering a downloadable computer program from a specific vendor. Accordingly, window analyzer 308 retrieves a description for the detected CLSID from product list 322, and then commands UI manager 320 to display a message box 902 containing the description as shown in FIG. 9B. As can be appreciated, third-party information about the computer program, such as that provided by message box 902, allows the user to make a more meaningful decision as to whether to install the computer program on her computer. Distribution of Computer Programs A computer program in accordance with embodiments of the present invention may be distributed to users several ways. One way is to distribute the computer program on removable storage media such as a CD-ROM, for example. Another way is to offer the computer program for download from a server computer such as a web server computer 102 or a support server computer 103. Another way is to bundle the computer program with a second computer program; the computer program may be offered to the user while the second computer program is being processed for installation on the user's computer. FIG. 10 shows a flow diagram of a method for distributing a computer program in accordance with an embodiment of the present invention. While the method of FIG. 10 will now be described in connection with a window-blocking computer program, those of ordinary skill in the art will appreciate that the method may be used to distribute any type of computer program. In action 1002, a computer program is installed on a client computer 101. Preferably, the computer program will only have minimum functionality to minimize its impact on the storage and computing resources of the client computer. For example, an exclusion list 312 does not have to be installed if the program is a window-blocking computer program. Also, the computer program is installed but remains partially disabled (i.e., inactive) until the user accepts it. For a window-blocking computer program, window analyzer 308 detects bad windows and good windows but will not block any window. In action 1004, the user's need for the computer program is detected. In the window-blocking computer program example, scorekeeper 318 keeps track of the number of bad windows detected by window analyzer 308. In actions 1006 and 1008, the user is informed of the usefulness of the computer program, and is thereafter offered the computer program. In the window-blocking computer program example, window analyzer 308 commands UI manager 320 to display the results of scorekeeper 318 once the number of detected bad windows reaches a certain threshold (e.g., 2 bad windows in a given session). The threshold may be varied depending on implementation. An example message box that may be displayed to the user may read:
In action 1010, the computer program is enabled (i.e., fully activated) if the user decides to accept it. At this point, the entirety of the computer program may be installed in the user's computer if needed. In the window-blocking computer program example, exclusion list 312 may be downloaded to the user's client computer 101 if the list is not already installed. An improved technique for processing windows has been disclosed. While specific embodiments have been provided, it is to be understood that these embodiments are for illustration purposes and not limiting; many additional embodiments will be apparent to persons of ordinary skill in the art reading this disclosure. For example, while the following description uses a computer network such as the Internet as an example, persons of ordinary skill in the art will appreciate that the present invention also applies to windows that are generated by a local program on a non-networked computer. Thus, the present invention is limited only by the following claims.
|
Same subclass Same class Consider this |
||||||||||
