7

Xin chào!
Tôi đang tạo tiện ích mở rộng của Chrome, trong đó tôi cần nhúng SWFobject vào trang nền.
Mọi thứ đều hoạt động, ngoại trừ các điều khiển JavaScript cho SWFobject và eventListeners.
Tôi đoán là nó có liên quan đến chính sách đa miền, bởi vì trong khi kiểm tra trang trên máy chủ web, mọi thứ đều hoạt động tốt.SWFobject trong Tiện ích mở rộng của Chrome - API Unavaiable

Dù sao, đây là một đoạn trích:

Trong trang chính:

var playerView = chrome.extension.getBackgroundPage(); 
$('#playerPause').click(function(){ 
    playerView.playerPause(); 
}); 

Trong nền:

function playerPause() { 
    if (postData[nowPlaying].provider == 'youtube') { 
     player.pauseVideo(); 
    } 
    else if (postData[nowPlaying].provider == 'soundcloud') { 
     player.api_pause(); 
    }; 
} 

eventListeners:

soundcloud.addEventListener('onMediaEnd', playerNext); 

function onYouTubePlayerReady(player) { 
    player.addEventListener("onStateChange", "function(state){ if(state == 0) { playerNext(); } }"); 
} 

Trong giao diện điều khiển nó ném

"Uncaught TypeError: Object # has no method 'pauseVideo'"

cho cả Youtube nhúng một Soundcloud.

Ngoài ra, SWFObject được nhúng vào như thế này (và các công trình):

function loadTrack (id) { 
    if(postData[id].provider == 'youtube') { 
     swfobject.embedSWF(
      "http://www.youtube.com/e/" + postData[id].url + "?enablejsapi=1&playerapiid=player", 
      "player", 
      "1", 
      "1", 
      "8", 
      null, 
      { 
       autoplay: 1 
      }, 
      { 
       allowScriptAccess: "always" 
      }, 
      { 
       id: "player" 
      } 
     ); 
    } 
    else if(postData[id].provider == 'soundcloud') { 
     swfobject.embedSWF(
      'http://player.soundcloud.com/player.swf', 
      'player', 
      '1', 
      '1', 
      '9.0.0', 
      'expressInstall.swf', 
      { 
       enable_api: true, 
       object_id: 'player', 
       url: postData[id].url, 
       auto_play: true 
      }, 
      { 
       allowscriptaccess: 'always' 
      }, 
      { 
       id: 'player', 
       name: 'player' 
      } 
     ); 
    } 
} 

Xin lỗi vì bài viết dài, tôi muốn cung cấp càng nhiều thông tin càng tốt.
Ngoài ra, tôi biết mã là không đẹp, đây là chỉ ứng dụng thứ hai của tôi;)

Cảm ơn rất nhiều trước cho bất cứ ai có thể giúp đỡ,
Giacomo

+0

Không có câu trả lời cho bạn, nhưng đề xuất: mã SWFObject YouTube của bạn khai báo FlashVars ở hai vị trí khác nhau; Tôi đề nghị bạn đơn giản hóa một phương pháp duy nhất. ? enablejsapi = 1 & playerapiid = trình phát có thể được chèn vào đối tượng FlashVars dưới dạng {autoplay: 1, enablejsapi: 1, playerapiid: "player"}. Ngoài ra, bạn có thể di chuyển 'autoplay' vào chuỗi truy vấn:? Enablejsapi = 1 & playerapiid = player & autoplay = 1 – pipwerks

+0

@pipwerks Cảm ơn bạn đã đề xuất, tôi không biết làm thế nào tôi quên điều đó! – Giakki

+0

Tôi đang bối rối về cách "người chơi" được xác định. Đôi khi nó là một toàn cầu (trong "playerPause") và đôi khi nó là một địa phương (trong "onYouTubePlayerReady") có thể có một gợi ý ở đó. – mjhm

Trả lời

0

Bạn có thể có một cái nhìn tại this extension , bạn không thể truy cập kết nối cục bộ trong tiện ích mở rộng của Chrome, nhưng bạn có thể chạy tập lệnh nội dung dưới dạng mã proxy thay thế. (Bạn có thể phục vụ trang proxy trên gae hoặc bất kỳ máy chủ miễn phí nào khác)

0

Sự cố ở đây là bạn có thể không sử dụng các tập lệnh nội tuyến hoặc trình xử lý sự kiện nội tuyến trong tiện ích chrome kể từ khi tệp kê khai được phát triển thành v2.

Bạn nên thêm tệp kê khai để tôi hiểu điều gì đang xảy ra tốt hơn. Nhưng một thời gian ngắn tất cả các bạn đã bao giờ THỂ làm là

Trong trang chính,

  • Hủy bỏ tất cả các kịch bản nội tuyến và chuyển chúng sang một file JS bên ngoài.
  • Di nghe sự kiện inline, di chuyển chúng đến cùng hay cách khác JS bên ngoài và sử dụng

    addEventListener().

But the issue is, You can't execute calls to the swf in the background page or expect it to return anything. All these will continue to give you "Uncaught TypeError" Exception.

Lấy trường hợp của một hình ảnh webcam chụp swf, webcam sẽ được chuyển tiếp tới trang web, nhưng các chức năng cuộc gọi đến nó không bao giờ có thể được thực hiện và do đó hình ảnh sẽ không bao giờ bị bắt. Dự án của tôi để quét mã QR từ cửa sổ bật lên addons đã gặp những tàn tích do điều này.

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