これは、JavaScript 内でほぼ完全に実行し、結果を Objective C に戻す必要があります。表示するコンテンツを制御できる場合は、この関数を<script>
タグに追加できます。それ以外の場合は、この投稿で説明されているように注入する必要があります。
function rectsForSelection() {
var i = 0, j = 0;
var allSelections = window.getSelection();
var result = []; // An empty array right now
// Generally, there is only one selection, but the spec allows multiple
for (i=0; i < allSelections.rangeCount; i++) {
var aRange = allSelections.getRangeAt(i);
var rects = aRange.getClientRects();
for (j=0; j<rects.length; j++) {
result.push(rects[j]);
}
}
return JSON.stringify(result);
}
次に、Objective C コードから、次のようなことを行います。
NSString *rectsString = [webView stringByEvaluatingJavaScriptFromString:@"rectsForSelection();"];
NSData *rectsData = [rectsString dataUsingEncoding:NSUTF8StringEncoding];
NSArray *rects = [NSJSONSerialization JSONObjectWithData:rectsData
options:0
error:NULL]; //Do Your Own Error Checking
webView.scrollView
これにより、 ではなく内で有効な座標が取得されることを付け加えておきますwebView
。