2011-07-10 60 views
5

Trong tệp manifest.json, tôi tuyên bố rằng tôi muốn tiêm một số kịch bản, như thế này:Trong tiện ích của Chrome, tập lệnh nội dung không thể ảnh hưởng bên trong iframe?

{ 
    "name": "my extension", 

    "version": "1.0", 

    "background_page": "background.html", 

    "permissions": ["contextMenus", "tabs", "http://*.example.com/*"], 

    "content_scripts": [ 
     { 
      "matches": 
       [ 
       "http://*.taobao.com/*", 
       "http://*.yintai.com/*" 
       ], 
      "run_at": "document_idle", 
      "js": ["jquery-1.5.1.min.js","jquery-ui-1.8.13.custom.min.js", "contentscript.js"], 
      "all_frames": true 
     } 
    ] 
} 

Trong kịch bản nội dung, tôi tạo ra một khung nội tuyến, trong số những thứ khác. Nó hoạt động tốt cho đến nay. Như thế này:

$('<div id="my_notifier"></div>').appendTo($('body')).html('<iframe src="http://example.com"></iframe>'); 

Vấn đề ở bên trong khung nội tuyến, nó không kế thừa bất kỳ thứ gì từ tập lệnh nội dung. Nếu tôi muốn sử dụng jQuery, tôi phải sử dụng <script src=... để đưa nó trở lại bên trong khung nội tuyến.

Tôi không muốn bao gồm jQuery một lần nữa vì tôi đã đặt nó trong phần mở rộng. Tôi không muốn người dùng tải về jQuery một lần nữa và một lần nữa trên mỗi trang mà phần mở rộng cần phải chạy trên.

Tôi đã thử thuộc tính "all_frames": true nhưng không hoạt động.

Vui lòng thông báo. Cảm ơn.

Edit: Tôi thêm example.com vào thuộc tính matches như thế này:

"content_scripts": [ 
    { 
     "matches": 
      [ 
      "http://*.taobao.com/*", 
      "http://*.yintai.com/*", 
      "http://*.example.com/*" 
      ], 
     "run_at": "document_idle", 
     "js": ["jquery-1.5.1.min.js","jquery-ui-1.8.13.custom.min.js", "contentscript.js"], 
     "all_frames": true 
    } 
] 

Nhưng nó không hoạt động.

Để được rõ ràng hơn, nói nội dung của khung nội tuyến (example.com) là:

<!DOCTYPE HTML> 

<html> 
<head> 
    <title>Untitled</title> 
</head> 

<body> 

<div></div> 

<script type="text/javascript"> 
    $('div').html('hi'); 

</script> 

</body> 
</html> 

Sẽ có một lỗi: $ không được định nghĩa

Để làm cho nó làm việc, tôi phải sử dụng:

<!DOCTYPE HTML> 

<html> 
<head> 
    <title>Untitled</title> 
</head> 

<body> 

<div></div> 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
<script type="text/javascript"> 
    $('div').html('hi'); 

</script> 

</body> 
</html> 
+0

Bạn có thể hiển thị tệp kê khai đầy đủ của mình với bộ 'all_frames' và mã tập lệnh nội dung tạo khung nội tuyến không? – serg

+0

Ok, tôi đã chỉnh sửa câu hỏi. – Betty

+0

Hey Betty, bây giờ Serg đã giải quyết được vấn đề ban đầu, hãy xem câu hỏi này đang đợi cho đến khi khung đã được tải để truy cập nó: http: // stackoverflow.com/questions/4669089/how-to-inject-an-iframe-panel-to-a-google-chrome-mở rộng-và-thêm-nhấp-sự kiện-in – Darin

Trả lời

4

bạn cần phải add url của iframe bạn http://example.com vào danh sách và xác định các kịch bản nội dung để tiêm:

0.123.
"content_scripts": [ 
     { 
      "matches": 
       [ 
       "http://*.taobao.com/*", 
       "http://*.yintai.com/*" 
       ], 
      "run_at": "document_idle", 
      "js": ["jquery-1.5.1.min.js","jquery-ui-1.8.13.custom.min.js", "contentscript.js"] 
     },{ 
      "matches":["http://example.com/*"], 
      "run_at": "document_idle", 
      "js": ["jquery-1.5.1.min.js"], 
      "all_frames": true 
     } 
    ] 
+0

Tôi đã thử theo cách của bạn và cách khác bằng cách thêm example.com vào thuộc tính 'matches', nhưng không có may mắn. Xem câu hỏi đã chỉnh sửa. PS: Tôi nhấn enter để có được một dòng mới, và tôi đã ngạc nhiên khi thấy rằng nhận xét đã được gửi. >< – Betty

+0

@Betty Nó sẽ không hoạt động theo cách bạn muốn. Các tập lệnh nội dung được sandboxed, một trang thông thường không thể truy cập jquery được tiêm dưới dạng tập lệnh nội dung trong đó. Nếu khung example.com là một phần của phần mở rộng của bạn và bạn có toàn quyền kiểm soát nó, bạn có thể di chuyển tất cả javascript từ trang đó vào một tập lệnh nội dung và tiêm nó cùng với jquery. – serg

+0

Cảm ơn bạn @serg. Nội dung của khung example.com của tôi được tạo động, vì vậy tôi không thể đặt nó trong tiện ích. Tôi nghĩ điều đó có nghĩa là những gì tôi muốn không thể làm được. Tôi sẽ phải sử dụng

0

Nếu vấn đề hiệu suất cho bạn, nếu tôi khuyên bạn nên sử dụng javascript tinh khiết thay vì jQuery, và sự khác biệt hiệu suất sẽ được chú ý cho các trang nặng có chứa nhiều iFrames; đặc biệt nếu bạn sử dụng các chức năng jquery như nối thêmlọcbộ chọn phức tạp.

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