2010-06-29 31 views
13

Vì vậy, tôi đang làm việc trên một bookmarklet, nơi sẽ là lý tưởng để tôi lấy nội dung do người dùng chọn bằng cách sử dụng "vòng lặp". Cả window.getSelection và document.getSelection là các hàm mà tôi có thể gọi, tuy nhiên chúng luôn trả về một chuỗi rỗng.Sử dụng Javascript để chọn văn bản đã chọn trong Mobile Safari

Tôi tin rằng vấn đề là khi bạn chạm vào biểu tượng dấu trang trong Mobile Safari, lựa chọn sẽ được phát hành. Ví dụ: nếu bạn chọn một số văn bản, hãy nhấn vào dấu "+", dấu trang hoặc tab khác, lựa chọn sẽ không được chọn ngay cả khi bạn hủy.

Bất kỳ suy nghĩ nào về việc liệu có thể nhận được dữ liệu này không? Hoặc là điều này khá nhiều không thể?

+0

Bạn có chắc chắn rằng window.getSelection() trả về chuỗi rỗng và không phải DOMSelection không? Tôi không có quyền truy cập vào Mobile Safari, nhưng trong webkit chức năng này trả về DOMSelection ngay cả khi không có gì được chọn trên trang. – SWilk

+0

xem thêm http://stackoverflow.com/questions/1936132/getselection-for-iphone-bookmarklet – cofiem

Trả lời

1

Tôi nghĩ bạn sẽ phải có bookmarklet chèn một số nội dung vào trang sẽ hoạt động trên vùng chọn. Bạn có thể thêm nút vào đầu hoặc cuối trang và khi được nhấp vào nút đó sẽ tác động đến lựa chọn hiện tại. Sau đó nó có thể dọn sạch nội dung được thêm vào hoặc để lại ở đó.

+0

Đây là một trong những giải pháp mà tôi đã nghĩ đến sau khi đăng câu hỏi này. Mối quan tâm của tôi với giải pháp này là tôi không thể nghĩ ra một cách tốt để định vị "nút" được thêm vào để nó có thể dễ dàng lựa chọn. Mobile Safari không hỗ trợ thuộc tính CSS "position: fixed". Ngoài ra nó cho biết thêm nhiều bước: 1) Kích hoạt bookmark 2) Chọn văn bản 3) Xác định vị trí và kích hoạt nội dung bổ sung của bookmark vs 1) Chọn văn bản 2) Kích hoạt bookmark Cảm ơn bạn đã gợi ý của bạn. – Nirmal

+0

Bạn có thể muốn tạo một khung cửi tại bookmarklet từ http://amplify.com/ - chúng thực hiện chính xác những gì được đề xuất ở đây và nút theo sau hành động cuộn. – FRotthowe

1

Nội dung của "vòng lặp" không được hiển thị với javascript trong trình duyệt trên thiết bị di động. Vì vậy, điều này là không thể (tôi giả định rằng bạn đang làm việc trong trình duyệt đầy đủ, không phải trong cửa sổ trình duyệt được tạo khi bạn khởi chạy biểu tượng "được lưu vào trang chủ")

+0

Bài đăng của bạn là nhận xét chứ không phải là câu trả lời. Sử dụng nhận xét khi bạn đặt câu hỏi và không đăng giải pháp. Nếu không thì nó không hữu ích. – UpHelix

+0

Đây là câu trả lời nếu anh ấy làm việc trong trình duyệt gốc. –

-1

Tôi có một ý tưởng khá đơn giản.

var latestSelection = ""; 
while (true) 
{ 
    var tmp; 
    if ((tmp = document.getSelection()) != "") 
     latestSelection = tmp; 
} 

Bằng cách này bạn sẽ luôn có lựa chọn mới nhất trong biến Lựa chọn mới nhất. Tất nhiên nó sẽ tốn kém để có một vòng lặp chạy như thế này tất cả các thời gian. Vì vậy, bạn có thể sẽ muốn chơi xung quanh với người nghe hoặc ít nhất là giờ.

Hy vọng điều này sẽ hữu ích.

Cập nhật: Không sử dụng mã ở trên.

Đây là cách bạn sẽ viết những điều tương tự trong Objective-C:

- (void) updateSelection 
{ 
    NSString * tmp = [webView stringByEvaluatingJavaScriptFromString:@"document.getSelection()"]; 
    if (![tmp isEqualToString:@""]) 
     latestSelection = tmp; 
} 

Bạn có thể có một bộ đếm thời gian thực hiện updateSelection mỗi x đơn vị thời gian. Nếu bạn tìm thấy một số thông báo tốt cho bạn biết rằng người dùng đã tương tác với chế độ xem web, bạn có thể sử dụng thông tin đó để cập nhậtSelection mới nhất.

+0

Tôi nghĩ rằng điều này sẽ khóa thread UI, mặc dù thay đổi để sử dụng setInterval() hoặc setTimeout() sẽ không,;) –

+0

Bất cứ ai có thể giải thích tại sao câu trả lời này đã được bình chọn? Tôi giải thích rằng bạn nên sử dụng bộ hẹn giờ hoặc người nghe, để bạn không khóa giao diện người dùng. Ngoài ra nếu bạn không muốn viết nó trong Javascript, bạn có thể dễ dàng viết cùng một điều trong Objective-C. Mã chỉ giải thích một ý tưởng. Tôi đã không gợi ý rằng bạn sẽ thực sự sử dụng mã đó. –

+0

Tôi không hiểu tại sao nó lại bị bỏ phiếu. Có vẻ hữu ích với tôi. Tôi vừa mới bình chọn nó. Bất kỳ ý tưởng gì loại người nghe để sử dụng? Bộ hẹn giờ sẽ chạy nguy cơ thiếu các thay đổi đối với lựa chọn xảy ra giữa lần hẹn giờ cuối cùng và khi bạn thực hiện dấu trang. – LarsH

Các vấn đề liên quan