HighDots Forums  

Zugriff auf einen Frame in einem anderen Tab

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss Zugriff auf einen Frame in einem anderen Tab in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Stefan Dreyer
 
Posts: n/a

Default Zugriff auf einen Frame in einem anderen Tab - 07-01-2009 , 12:03 PM






Ich habe folgende Problematik:

Ich habe eine Seite, bei der innerhalb eines Frames eine PDF-Datei
aufgerufen wird. Diese PDF-Datei sollte aber noch getaner Arbeit eine
URL im gleichen Frame oder Fenster aufrufen(per LaunchURL). Sie tut es
aber nicht, sondern die URL wird in einem zusätzlichen Tab geladen.

Damit könnte ich leben, wenn ich innerhalb dieser URL mein Frame oder
das ursprünglich Fenster mit einem neuen Inhalt belegen könnte. Ist das
irgendwie möglich?

Versuch der Verdeutlichung

Ursprüngliches Fenster
+-----------------+
Quote:
| Neuer Tab
+---+-------------+ +-----------------+
| Frame: f1 | | |
| PDF -------->| Neue URL |
| | | Inhalt von f1 |
ändern |

Reply With Quote
  #2  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Zugriff auf einen Frame in einem anderen Tab - 07-01-2009 , 12:26 PM






Stefan Dreyer wrote:
Quote:
Ich habe eine Seite, bei der innerhalb eines Frames eine PDF-Datei
aufgerufen wird. Diese PDF-Datei sollte aber noch getaner Arbeit eine
URL im gleichen Frame oder Fenster aufrufen(per LaunchURL). Sie tut es
aber nicht, sondern die URL wird in einem zusätzlichen Tab geladen.
Wenn ein bestimmtes Plugin verwendet wird, z.B. Adobe Reader, könnte es
eine Möglichkeit geben, das zu verhindern. Das wäre hier aber off-topic.

Quote:
Damit könnte ich leben, wenn ich innerhalb dieser URL mein Frame oder
das ursprünglich Fenster mit einem neuen Inhalt belegen könnte. Ist das
irgendwie möglich?
window.opener-basierte Referenzen könnten funktionieren, solange die SOP
beachtet wird (so in Firefox/Iceweasel 3.0.11).


PointedEars

Reply With Quote
  #3  
Old   
Stefan Dreyer
 
Posts: n/a

Default Re: Zugriff auf einen Frame in einem anderen Tab - 07-01-2009 , 01:21 PM



Thomas 'PointedEars' Lahn wrote:
Quote:
Stefan Dreyer wrote:
Ich habe eine Seite, bei der innerhalb eines Frames eine PDF-Datei
aufgerufen wird. Diese PDF-Datei sollte aber noch getaner Arbeit eine
URL im gleichen Frame oder Fenster aufrufen(per LaunchURL). Sie tut es
aber nicht, sondern die URL wird in einem zusätzlichen Tab geladen.

Wenn ein bestimmtes Plugin verwendet wird, z.B. Adobe Reader, könnte es
eine Möglichkeit geben, das zu verhindern. Das wäre hier aber off-topic.
Kannst Du mir verraten, welche? Gerne per PM oder in dctp. Ich habe
jedenfalls noch keine gefunden, die funktionieren. Die Lösung wäre mir
ja die liebste.

Quote:
Damit könnte ich leben, wenn ich innerhalb dieser URL mein Frame oder
das ursprünglich Fenster mit einem neuen Inhalt belegen könnte. Ist das
irgendwie möglich?

window.opener-basierte Referenzen könnten funktionieren, solange die SOP
beachtet wird (so in Firefox/Iceweasel 3.0.11).
Das werde ich mal ausprobieren.

Reply With Quote
  #4  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Zugriff auf einen Frame in einem anderen Tab - 07-01-2009 , 05:13 PM



Stefan Dreyer wrote:
Quote:
Thomas 'PointedEars' Lahn wrote:
Stefan Dreyer wrote:
Ich habe eine Seite, bei der innerhalb eines Frames eine PDF-Datei
aufgerufen wird. Diese PDF-Datei sollte aber noch getaner Arbeit eine
URL im gleichen Frame oder Fenster aufrufen(per LaunchURL). Sie tut es
aber nicht, sondern die URL wird in einem zusätzlichen Tab geladen.
Wenn ein bestimmtes Plugin verwendet wird, z.B. Adobe Reader, könnte es
eine Möglichkeit geben, das zu verhindern. Das wäre hier aber off-topic.

Kannst Du mir verraten, welche? Gerne per PM oder in dctp. Ich habe
jedenfalls noch keine gefunden, die funktionieren. Die Lösung wäre mir
ja die liebste.
IIRC konnte man in Adobe Acrobat 8.0 bei Links das Zielfenster definieren.

BTW: Gern geschehen.


PointedEars

Reply With Quote
  #5  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Zugriff auf einen Frame in einem anderen Tab - 07-02-2009 , 07:29 AM



Stefan Dreyer wrote:
Quote:
Thomas 'PointedEars' Lahn wrote:
Stefan Dreyer wrote:
Thomas 'PointedEars' Lahn wrote:
Stefan Dreyer wrote:
Ich habe eine Seite, bei der innerhalb eines Frames eine PDF-Datei
aufgerufen wird. Diese PDF-Datei sollte aber noch getaner Arbeit eine
URL im gleichen Frame oder Fenster aufrufen(per LaunchURL). Sie tut es
aber nicht, sondern die URL wird in einem zusätzlichen Tab geladen.
Wenn ein bestimmtes Plugin verwendet wird, z.B. Adobe Reader, könnte es
eine Möglichkeit geben, das zu verhindern. Das wäre hier aber off-topic.
Kannst Du mir verraten, welche? Gerne per PM oder in dctp. Ich habe
jedenfalls noch keine gefunden, die funktionieren. Die Lösung wäre mir
ja die liebste.

IIRC konnte man in Adobe Acrobat 8.0 bei Links das Zielfenster definieren.

Es wird jetzt fast OffT: Das Problem ist, dass ich nicht Acrobat 8.0
nutze, sondern die PDFs direkt mit tcpdf erzeuge und per Embedded
Javascript (jetzt wird es fast wieder OnT)
"Embedded Javascript"?

Quote:
die URL aufrufe.
Siehe Sig.

Quote:
Dort habe ich ausser der URL leider nur den Parameter:
bNewFrame (optional) If true, this method launches the URL in a new
window of the browser application. The default is
false.
Faszinierend. Und welches tcpdf meinst Du?

<http://www.tecnick.com/pagefiles/tcpdf/doc/com-tecnick-tcpdf/TCPDF.html#methodaddHtmlLink>

ist es anscheinend nicht.


PointedEars
--
Quote:
In [einem Popup] soll sich ein Link befinden, der im Hauptfenster
ausgeführt werden soll. Habt ihr ne Ahnung, wie man das anstellt?
Links werden niemals ausgeführt, denn es sind keine Hunde, mit denen man
Gassi geht. (Georg Maaß in dcljs <aop009$ooab4$1 (AT) ID-3551 (DOT) news.dfncis.de>)

Reply With Quote
  #6  
Old   
Stefan Dreyer
 
Posts: n/a

Default Re: Zugriff auf einen Frame in einem anderen Tab - 07-02-2009 , 08:24 AM



Thomas 'PointedEars' Lahn wrote:
Quote:
"Embedded Javascript"?
Das ehrt mich, das ich Dir in Bezug auf Java^WECMAscript noch was
beibringen kann, was Du nicht kennst;-)

<http://www.adobe.com/devnet/acrobat/javascript.html>

Damit kannst Du in PDF clientseitiges Javascript ausführen.


Quote:
Dort habe ich ausser der URL leider nur den Parameter:
bNewFrame (optional) If true, this method launches the URL in a new
window of the browser application. The default is
false.


Faszinierend. Und welches tcpdf meinst Du?

http://www.tecnick.com/pagefiles/tcpdf/doc/com-tecnick-tcpdf/TCPDF.html#methodaddHtmlLink

ist es anscheinend nicht.
Das tcpdf ist schon korrekt, aber die Funktion ist:

<http://www.tecnick.com/pagefiles/tcpdf/doc/com-tecnick-tcpdf/TCPDF.html#methodIncludeJS>

Die Funktion musste ich allerdings etwas modifizieren, da das Original
ein paar Funktionen einbaut, die nur für Formularfelder sinnvoll sind.
Das Script druckt das PDF dann automatisch und anschließend eine neue
Seite aufrufen, damit das PDF nicht mehr im Browser sichtbar ist.

Reply With Quote
  #7  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Zugriff auf einen Frame in einem anderen Tab - 07-02-2009 , 08:48 AM



Stefan Dreyer wrote:
Quote:
Thomas 'PointedEars' Lahn wrote:
"Embedded Javascript"?

Das ehrt mich, das ich Dir in Bezug auf Java^WECMAscript noch was
beibringen kann, was Du nicht kennst;-)
Da muss ich Dich leider enttäuschen

Quote:
http://www.adobe.com/devnet/acrobat/javascript.html

Damit kannst Du in PDF clientseitiges Javascript ausführen.
Dass das möglich ist, war mir schon klar (s. Google); nur
nicht, wie Du es in diesem Zusammenhang meinst (Quelltext?).

Quote:
Dort habe ich ausser der URL leider nur den Parameter:
bNewFrame (optional) If true, this method launches the URL in a new
window of the browser application. The default is
false.

Faszinierend. Und welches tcpdf meinst Du?

http://www.tecnick.com/pagefiles/tcpdf/doc/com-tecnick-tcpdf/TCPDF.html#methodaddHtmlLink

ist es anscheinend nicht.

Das tcpdf ist schon korrekt, aber die Funktion ist:

http://www.tecnick.com/pagefiles/tcpdf/doc/com-tecnick-tcpdf/TCPDF.html#methodIncludeJS

Die Funktion musste ich allerdings etwas modifizieren, da das Original
ein paar Funktionen einbaut, die nur für Formularfelder sinnvoll sind.
Das Script druckt das PDF dann automatisch und anschließend eine neue
Seite aufrufen, damit das PDF nicht mehr im Browser sichtbar ist.
ACK. Ohne Deinen Quelltext zu sehen, kann Mann[tm] aber leider nichts dazu
sagen.


PointedEars
--
Von "funktionieren" kann also hier keine Rede sein. Ursache für Deinen
Irrtum ist wohl, dass auch Du annimmst, dass Ausprobieren von Spaghetticode
auf einem System oder wenigen Systemen ein sinnvoller Ersatz für saubere
Syntax und richtige Tests sei. -- Dietmar Meier in dcljs

Reply With Quote
  #8  
Old   
Stefan Dreyer
 
Posts: n/a

Default Re: Zugriff auf einen Frame in einem anderen Tab - 07-02-2009 , 09:09 AM



Thomas 'PointedEars' Lahn wrote:
Quote:
Stefan Dreyer wrote:

Thomas 'PointedEars' Lahn wrote:

"Embedded Javascript"?

Das ehrt mich, das ich Dir in Bezug auf Java^WECMAscript noch was
beibringen kann, was Du nicht kennst;-)


Da muss ich Dich leider enttäuschen
Schade.

Quote:
ACK. Ohne Deinen Quelltext zu sehen, kann Mann[tm] aber leider nichts dazu
sagen.
Der komplette Quelltext sieht dann so aus:

$script='
// Dokument schliessen, wenn es ausserhalb eines Browsers ausgefuehrt
// wird
if (! this.external) {
this.closeDoc();
}

// Druckerparameter setzen
var pp = this.getPrintParams();
pp.interactive = pp.constants.interactionLevel.silent;
pp.pageHandling = pp.constants.handling.none

// Drucken
this.print (pp);
// URL aufrufen
app.launchURL(\'/backurl/index.php\',false);
';
$this->pdf->IncludeJS($script);

Um das noch etwas sauberer zu gestalten bin ich noch dabei tcpdf
JS-Aktionen einzubauen (Didprint,Willprint). Da ich aber noch keine
passende Referenz gefunden habe, wo die Actions und das genaue einbauen
in das PDF beschrieben wird, bleibt mir nur reverse Engineering und
Trial-and-Error.

PS: Wenn Du obiges Beispiel ausprobieren möchtest, musst Du noch aus der
tcpdf.php folgende Zeilen rausschmeissen (oder die Funktion
_putjavascript entsprechend überladen)
// the following two lines are uded to avoid form fields duplication
after saving
$js =
sprintf("ftcpdfdocsaved=this.addField('%s','%s',%d ,[%.2F,%.2F,%.2F,%.2F]);",
'tcpdfdocsaved', 'text', 0, 0, 1, 0, 1);
$js = "getField('tcpdfdocsaved').value = 'saved';";

Die hat wohl irgendjemand mal zur Formularbehandlung eingebaut. Wenn man
das nicht will oder nutzt, muss man die rausschmeißen, weil die sonst in
der Reader JS-Konsole Fehler erzeugen.

Reply With Quote
  #9  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Zugriff auf einen Frame in einem anderen Tab - 07-02-2009 , 10:11 AM



Stefan Dreyer wrote:
Quote:
Thomas 'PointedEars' Lahn wrote:
ACK. Ohne Deinen Quelltext zu sehen, kann Mann[tm] aber leider nichts dazu
sagen.

Der komplette Quelltext sieht dann so aus:

$script='
// Dokument schliessen, wenn es ausserhalb eines Browsers ausgefuehrt
// wird
if (! this.external) {
this.closeDoc();
}

// Druckerparameter setzen
var pp = this.getPrintParams();
pp.interactive = pp.constants.interactionLevel.silent;
pp.pageHandling = pp.constants.handling.none

// Drucken
this.print (pp);
// URL aufrufen
app.launchURL(\'/backurl/index.php\',false);
CMIIW, aber das sieht irgendwie nicht nach einem Link aus, sondern nach
einem Popup.

Quote:
';
Mit HereDoc-String wird es etwas lesbarer und Syntax-Highlighting könnte
dann auch wieder funktionieren (zumindest in vim und PDT klappt das):

$sscript = <<JS
/* clientseitiger Code */
JS;

Quote:
$this->pdf->IncludeJS($script);

Um das noch etwas sauberer zu gestalten bin ich noch dabei tcpdf
JS-Aktionen einzubauen (Didprint,Willprint). Da ich aber noch keine
passende Referenz gefunden habe, wo die Actions und das genaue einbauen
in das PDF beschrieben wird, bleibt mir nur reverse Engineering und
Trial-and-Error.
Ich denke nicht, dass Du vorhandene Funktionalität nachbauen musst oder
solltest.

Quote:
PS: Wenn Du obiges Beispiel ausprobieren möchtest, musst Du noch aus der
tcpdf.php folgende Zeilen rausschmeissen (oder die Funktion
_putjavascript entsprechend überladen)
// the following two lines are uded to avoid form fields duplication
after saving
$js =
sprintf("ftcpdfdocsaved=this.addField('%s','%s',%d ,[%.2F,%.2F,%.2F,%.2F]);",
'tcpdfdocsaved', 'text', 0, 0, 1, 0, 1);
$js = "getField('tcpdfdocsaved').value = 'saved';";

Die hat wohl irgendjemand mal zur Formularbehandlung eingebaut. Wenn man
das nicht will oder nutzt, muss man die rausschmeißen, weil die sonst in
der Reader JS-Konsole Fehler erzeugen.
Man könnte möglicherweise auch einen Test einbauen. Die erste Zeile sieht
redundant aus (Wert wird in der zweiten Zeile überschrieben), daher z.B.:

$js = "var f = getField('tcpdfdocsaved'); if (f) f.value = 'saved';";


PointedEars
--
Quote:
hoehe=screen.height; breite=screen.width;
Was hat dies mit der Fenstergröße zu tun? Genauso kannst Du fragen:
"Wie groß ist Nachbars Garage?", um zu ermitteln, wie groß wohl mein
Auto sein mag. (Georg Maaß in dcljs <ap315c$r2pon$2 (AT) ID-3551 (DOT) news.dfncis.de>)

Reply With Quote
  #10  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Zugriff auf einen Frame in einem anderen Tab - 07-02-2009 , 06:01 PM



Stefan Dreyer wrote:
Quote:
Thomas 'PointedEars' Lahn wrote:
Stefan Dreyer wrote:
app.launchURL(\'/backurl/index.php\',false);
CMIIW, aber das sieht irgendwie nicht nach einem Link aus, sondern nach
einem Popup.

Nein. Das ist schon der Link, der wird auch korrekt aufgerufen.
Soifz. [psf 10.1]

Diese (Deine falshce) Terminologie sollten wir jetzt klären (korrigieren),
sonst führt das zu nichts:

Ein (Hyper)link ist einfach ein *aktivierbarer* *Verweis* (in HTML: <a
href="..." ...>...</a> oder <area href="..." ...>).

Links werden _nicht_ aufgerufen (und auch _nicht_ ausgeführt o.ä.,
siehe vorherige Signatur). Allenfalls kann man Verweisen *folgen*.

Im Unterschied dazu ist ein URL (oder URI) eine Referenz auf eine (oder,
wenn man so will, ein möglicher Pfad zu einer) Ressource, der/die auch in
einem (Hyper)link verwendet werden kann (falls ein relativer Pfad, so wie
hier, dann heisst dieser -- leicht verwirrend -- "URI-reference").

URLs/URIs sind _keine_ Links!

Vgl. <http://www.w3.org/TR/html401/struct/links.html#h-12.1> und
<http://tools.ietf.org/html/rfc3986>.

Quote:
D.h. Acrobat setzt brav die komplette URL zusammen.
Seite 127 der "JavaScript for Acrobat API Reference" entnehme ich, dass
Acrobat hier gar nichts zusammensetzt:

Quote:
launchURL
7.0 S

Launches a URL in a browser window.
(Wie man sieht, bist Du mit der falschen Terminologie nicht allein. Korrekt
wäre z.B. gewesen: "Displays a resource by its URL" [oder: "URI"] "in a
browser window.")

Quote:
Note: This method does not support URLs that begin with either
scheme name javascript or file.

Parameters
cURL A string that specifies the URL to launch.
bNewFrame (optional) If true, this method launches
the URL in a new window of the browser
application. The default is false.
Returns
The value undefined is returned on success. An exception is thrown
on failure.
Das etwas völlig anderes als ein Link -- nämlich ein *Popup*.

Wenn dieses Popup jetzt durch Aktivieren eines Links (s.o.) erzeugt wird, so
ist vielmehr der Code relevant, welcher den Link erzeugt.

Zum Vergleich in HTML ein Link, der bei Aktivierung ein Popup erzeugt (falls
dieses nicht blockiert wird):

<script type="text/java
function popup(url)
{
/* Kids, don't try this at home! */
if (window.open)
{
/* Popup erzeugen (oder auch nicht) */
return window.open(url, ...);
}

return false;
}
</script>

<!-- Link -->
<a href="foo" onclick="return !popup(this.href)">bar</a>

Hier wäre also vielmehr der Code interessant, welcher das Äquivalent des
A-Elements in PDF generiert. Denn wenn man diesen (PHP-)Code so
modifizieren könnte, dass er das entsprechende Link-Objekt erzeugt, wäre
das Problem gelöst und kein Workaround nötig.

Dass das nicht geht, wage ich zu bezweifeln; per Adobe Acrobat 8.0-Editor-UI
geht es ja auch, und

Quote:
Example 2
Add an online help item to the menu system. This code should be placed
in a folder-level JavaScript file, or executed from the JavaScript Debugger
console.

app.addMenuItem({
cName: "myHelp", cUser: "Online myHelp",
cParent: "Help",
cExec: "app.launchURL('www.example.com/myhelp.html');",
nPos: 0
});
sieht vielversprechend aus.

Quote:
Um das noch etwas sauberer zu gestalten bin ich noch dabei tcpdf
JS-Aktionen einzubauen (Didprint,Willprint). Da ich aber noch keine
passende Referenz gefunden habe, wo die Actions und das genaue einbauen
in das PDF beschrieben wird, bleibt mir nur reverse Engineering und
Trial-and-Error.
Ich denke nicht, dass Du vorhandene Funktionalität nachbauen musst oder
solltest.

Doch muss ich leider. Es gibt zwar auch eine PDF-Javascript Funktion,
die das realisiert, aber die ist im Dokument nicht erlaubt [...]
Wirklich *jeder* mir bekannte DAU findet den Drucken-Button oder den
Drucken-Menübefehl (einschl. Druckereinrichtung) in seinem PDF-Betrachter.
Ich sehe nach wie vor keinen guten Grund, das Rad hier neu erfinden zu müssen.


PointedEars
--
"Use any version of Microsoft Frontpage to create your site.
(This won't prevent people from viewing your source, but no
one will want to steal it.)" -- Tipp gegen Quellcode-Klau,
<http://www.vortex-webdesign.com/help/hidesource.htm>

Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.