• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

Den Inhalt eines WebViews zoomen/vergrößern

VisioNOIR

Holländischer Prinz
Registriert
23.08.09
Beiträge
1.871
Hallo zusammen!

Ich habe ein WebView auf einem NSView liegen. Im Projekt habe ich auch entsprechend das WebKit-Framework eingebunden. Nun lade ich eine Website ins WebView. Funktioniert auch soweit wie erwartet, die Website wird angezeigt.

Nun möchte ich den Inhalt dieses WebViews vergrößern, quasi die Zoomstufe einstellen. Ich kann zwar via [WebView makeTextLarger]; die Schriftgröße verändern/vergrößern, nur beinhaltet die Website, die ich anzeigen möchte, auch Grafiken, welche ebenfalls vergrößert werden sollen.

Bin ich blind oder bietet mir ein WebView nicht diese Möglichkeit. Im Sourcecode vom WebView habe ich WebView::zoomPageIn (und Out, und diverses anderes, was darauf schliessen lässt, dass WebKit auch ganze Seiteninhalte zoomen kann) gefunden. Nur finde ich nichts passendes in der API/im WebView.h-File.

Für sachdienliche Hinweise bin ich Euch jetzt schon dankbar!

Grüße
Michael
 

VisioNOIR

Holländischer Prinz
Registriert
23.08.09
Beiträge
1.871
Danke für den Hinweis!

Nur funktioniert das mit NSAffineTransform mit einem WebView anscheinend nicht. Kurz zusammengefasst habe ich ein CustomWebView von WebView abgeleitet und die Methode drawRect entsprechend erweitert:
Code:
- (void)drawRect:(NSRect)dirtyRect {
	[[NSGraphicsContext currentContext] saveGraphicsState];

	NSAffineTransform *at = [NSAffineTransform transform];
	[at scaleBy:2.0f];
	[at concat];
	[self setBoundsSize:[at transformSize:customSize]];  //in customSize steht die aktuelle Größe des Views / des WebViews
	
	[super drawRect:dirtyRect];
	 [[NSGraphicsContext currentContext] restoreGraphicsState];
}
Dass der Code was macht merke ich daran, dass sich die Website so anfühlt, als ob sie doppelt so groß angezeigt wird (z.B. beim Überfahren von Links mit der Maus, diese werden versetzt ausgelöst, sprich, ich muss mich mit der Maus etwas unter dem Link befinden um diesen anzuklicken), die Website wird aber nach wie vor in der originalen Größe angezeigt.

Das gleiche Ergebnis bekomme ich mit
Code:
       NSSize size;	
        size.height = 2;
	size.width = 2;
       [self scaleUnitSquareToSize:size];
Es fühlt sich so an, als ob das WebView doppelt so groß ist, es sieht aber nicht so aus.

Mache ich was falsch? Habe ich einen Denkfehler? Wie macht es Safari? Kann ich irgendwie auf die Methode ZoomPageIn, welche definitiv im Sourcecode vom WebKits WebView enthalten ist, zugreifen? Fragen über Fragen...
 

VisioNOIR

Holländischer Prinz
Registriert
23.08.09
Beiträge
1.871
Och Kinners,

das kann doch wirklich nicht so schwer sein, wie ich mich gerade anstelle (zumindest habe ich momentan des Gefühl, dass ich mich ziemlich dösig anstelle...).

Im Internetz habe ich noch folgendes gefunden: http://www.free-solutions.de/js/ie_css_zoom.htm (das funktioniert auch in meinem WebView).
Quasi fast wie erwartet funktioniert meine Umsetzung des JavaScript-Zooms nicht:

Code:
	[WebView stringByEvaluatingJavaScriptFromString:@"parent.parent.document.body.style.zoom=2.0;"];
	//bzw. [WebView stringByEvaluatingJavaScriptFromString:@"document.body.style.zoom = 2.0;"];

Kann es sein, dass da ein wenig CSS mit im Spiel ist (Webseiten-Programmierung ist überhaupt nicht mein Ding; ich habe mich zumindest noch nicht großartig damit beschäftigt)?
Die Website, die ich anzeigen möchte, stammt nicht von mir, in sofern kann ich da auch eher weniger an den CSS-Styles bzw. am HTML-Code rumschrauben.

Und noch ein wenig zum Anwendungszweck, zum Grund, weshalb ich solch einen Unsinn programmatisch via Cocoa versuche zu erreichen: ich besitze ein 7" Touchscreen, auf diesem möchte ich eine Website anzeigen und via Finger-Touch bedienen. Nur sind Finger-Touches nicht ganz so präzise wie Maus-Klicks; mit doppelter Größe der Website erwarte ich ein besseres Verhalten auf %random-quasi-in-place"-Touches... ;)