2012-06-01 3 views
8

Gibt es eine Möglichkeit, ein Browserfenster aus einem Java-Applet-Warnfenster in den Vordergrund/Fokus zu ziehen? Ich habe ein Applet in einer HTML-Seite, die eine Warnung mit einem Knopf in ihm hervorbringt. Wenn die Schaltfläche gedrückt wird, möchte ich das ursprüngliche Browserfenster von wo immer es angezeigt wird (minimiert, abgedeckt, etc.) Ich glaube, es gibt eine Möglichkeit, Java mit Javascript zu verbinden, um dies zu tun, aber ich kenne Javascript nicht. HierJava/Javascript bringt Browserfenster mit Applet in den Vordergrund

ist der Java-Applet-Code:

/** An applet that posts an alert and waits for the alert button to be pressed. 
* Version 1 uses http://java.sun.com/products/plugin/1.3/docs/jsobject.html 
*/ 

import netscape.javascript.*; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Bounce extends JApplet implements ActionListener { 
    JDialog dialog; 
    JSObject window; 
    String message; 

    public void paint(Graphics g) { 
     g.clearRect(0,0, 400,40); 
     g.drawString(message,40,20); 
    } 

    public void init() { 
     JFrame frame= null; 
     dialog= new JDialog(frame, "Bounce App"); 

     JButton setupButton= new JButton("Bounce it back!"); 
     setupButton.addActionListener(this); 

     JPanel contentPane= new JPanel(); 
     contentPane.add(setupButton); 
     contentPane.setOpaque(true); 
     dialog.setContentPane(contentPane); 

     dialog.setSize(new Dimension(400, 110)); 
     dialog.setVisible(true); 

     message= "This applet posts an alert panel."; 
     window= JSObject.getWindow(this); 
//  String[] params= { "An alert message" }; 
//  window.call("alert", params); 
//  window.eval("alert('Important Alert!')"); 
    } 

    public void actionPerformed(ActionEvent e) { 
     dialog.setVisible(false); 
     dialog.dispose(); 
     System.err.println("button has been pushed; focus set"); 
     message= "Somebody pushed my bounce-back button."; 
     JSObject document= (JSObject)window.getMember("document"); 
     document.setMember("bgColor", "orange"); 
     window.eval("focus()"); 
     repaint(); 
    } 

} 

Und hier ist der HTML-Code:

<HTML> 
    <HEAD><TITLE>The Reappearing Page</TITLE></HEAD> 
    <body bgcolor="#f0ffc0"> 

    <H2>Make this page reappear</H2> 
    This page will start an applet (white box below) that sets up an alert. 
    Before you respond to the alert, hide the window you are reading right now, 
    using one of these methods:<ul> 
    <li> cover it with another window, </li> 
    <li> Hide it using a menu item, </li> 
    <li> Minimize it, or </li> 
    <li> move it to another workspace or desktop. </li> 
    </ul> 
    Then click on the button in the alert. 

    <P> 
    <EMBED type="application/x-java-applet;version=1.3" width="400" height="40" 
     align="baseline" code="Bounce.class" MAYSCRIPT=true 
     pluginspage="http://java.sun.com/products/plugin/1.3/plugin-install.html"> 
    <NOEMBED> 
     No JDK 1.3 support for APPLET!! 
    </NOEMBED> 
    </EMBED> 

    <P>What is supposed to happen is that the main window 
    will emerge from wherever you hid it and reappear. 
    Since I don't know how to do this, it is your challenge to actually make it happen. 
    We need to be able to achieve this magic from any of the situations listed above.</P> 

    </body> 

Antwort

1

(von Kommentar geändert zu beantworten, damit ich einen anständigen Code-Schnipsel schreiben für Sie) Es gibt keine zuverlässige Möglichkeit, ein Fenster mit JavaScript zu "Vordergrund" zu machen, es sei denn, es handelt sich um ein Fenster, das Sie selbst aus einer übergeordneten Seite erstellt haben ("Gratuliere !! Sie sind unser 1000. cu Stomer, du gewinnst einen Preis !!!!! "). Wenn Sie Ihr Applet-Fenster als Popup mit window.open aus einem anderen Fenster geladen haben, können Sie versuchen, window.focus mit:

var w = window.open(appletPageUrl); 
w.focus() 

Ich stelle mir Popup-Blocker nicht schätzen diese Art der Sache, so YMMV. Persönlich würde ich vorschlagen, dass Sie darüber nachdenken, ob ein Nutzer über Ihre Benachrichtigung informiert werden möchte, wenn er Ihre App ausgeblendet oder minimiert hat.