在UIWebView中更改字体大小后重新定位

时间:2013-10-02 13:41:06

标签: javascript html ios css uiwebview

我有一个带有大书的UIWebView。我正在使用"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust='150%';

通过javascript更改字体大小

Html页面变大,但滚动位置保持不变,导致文本移出用户视线。

我唯一的想法是,非常奇怪和低效:

  1. 包裹<span>代码中的每个字词;
  2. 找到第一个屏幕<span>并记住它是id;
  3. 调整大小字体;
  4. 滚动到span,我在第2步中找到了。
  5. 是否有更好的方法来保留用户正在阅读的位置?

1 个答案:

答案 0 :(得分:1)

最后我找到了一种可接受的方式:

在更改字体大小之前,我使用一些小的javascript来查找并存储页面上第一个字母的位置:

var range = document.caretRangeFromPoint(0,0); // get a range of a first onscreen letter
var textContainer = range.startContainer.parentNode;// get an element to which it belongs
var path = getElementXPath(textContainer); // get an XPath for that element (this function is not biult in, but you can find it in some other question)
path+='|'+range.startOffset; // stick XPath and index of the letter together

之后我更改字体大小,通过XPath查找所需元素,在我的字母前插入不可见的<a>,滚动到那个不可见的<a>,不要忘记删除它。

完成。这不是一个直截了当的想法,但至少它可以工作,并且不会消耗大量的CPU或RAM,就像我在原始问题中解释过的那样。

以下是获取getElementXPath() function

的地方