2011-08-24 42 views
53

Tôi có trang demo github.com liên kết tới https://raw.github.com/.../master/.../file.js để Tôi không cần phải luôn sao chép tệp .js qua chi nhánh gh-pages mỗi lần thay đổi. Này hoạt động ở mọi trình duyệt trừ IE mà phàn nàn:Bao gồm js từ raw.github.com

SEC7112: Script từ https://raw.github.com/cwolves/jQuery-iMask/master/dist/jquery-imask-min.js đã bị chặn do loại mime không phù hợp

khiếu nại này được xuất phát từ thực tế là các tập tin được chuyển giao với:

X-Content-Type-Options: nosniff 
Content-Type: text/plain 

mà tôi không thể thay đổi.

Bất kỳ ai cũng có ý tưởng về cách thực hiện điều tương tự này? Bằng cách nào đó cho phép tôi liên kết đến tệp trong chi nhánh master mà không cần phải luôn đẩy nó vào chi nhánh gh-pages?

trang Thực tế: http://cwolves.github.com/jQuery-iMask/

(cập nhật nhỏ - Tôi đã thay đổi gh-trang trong trường hợp này chính xác cần bao gồm tệp .js, vì vậy IE không còn bị phá vỡ, nhưng sẽ vẫn giống như bất kỳ thông tin phản hồi :))

Trả lời

14

Tôi không thể giúp bạn lừa IE, và tôi nghĩ từ góc độ mà bạn đang tìm kiếm là không thể (và không khuyến khích, vì đó không phải là mục đích của các URL thô của Github).

Tuy nhiên, bạn có thể tự động thực hiện các thay đổi đối với gh-pages và thúc đẩy cuộc sống của mình dễ dàng hơn. Bạn có thể thực hiện việc này với một số post-commit hook để tự động cập nhật các tệp có liên quan trong chi nhánh gh-pages. Tôi đã nấu chín lên như một kịch bản post-commit rằng đồng hồ để thay đổi tập tin nhất định và cam kết họ đến chi nhánh khác:

#!/bin/sh 

WATCH_BRANCH="master" 
WATCH_FILES="jquery-imask-min.js" 
DEST_BRANCH="gh-pages" 

# bail out if this commit wasn't made in the watched branch 
THIS_BRANCH=$(git branch --no-color | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'); 
if [ "$THIS_BRANCH" != "$WATCH_BRANCH" ]; then 
    exit 0 
fi 

# only update if watched files have changed in the latest commit 
CHANGED_FILES=$(git show --pretty="format:" --name-only $WATCH_BRANCH) 
if $(echo "$CHANGED_FILES" | grep "^$WATCH_FILES$" -q); then 
    # checkout destination branch, then 
    # checkout latest version of each watched file and add to index 
    git checkout -q $DEST_BRANCH 
    git pull -q 
    SAVEIFS=$IFS 
    IFS=$(echo -n "|") 
    for file in $WATCH_FILES; do 
    git checkout $WATCH_BRANCH -- $file 
    git add $file > /dev/null 
    done 
    IFS=$SAVEIFS 
    # commit with a chance to edit the message, then go back to watched branch 
    LATEST_COMMIT=$(git rev-parse $WATCH_BRANCH) 
    git commit -m "Also including changes from $WATCH_BRANCH's $LATEST_COMMIT" 
    git push origin $DEST_BRANCH 
    git checkout -q $WATCH_BRANCH 
fi 

Lưu ý rằng đây là một kịch bản chung, mặc dù tôi đã xác định cấu hình VAR ở phía trên cho bạn mục đích. $WATCH_FILES có thể được đặt thành danh sách các tệp được phân tách bằng dấu ngoặc ôm | chẳng hạn như index.html|js/jquery.js. Đường dẫn phải được chỉ định tương đối so với gốc của repo.

Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi nào và nếu tập lệnh giúp bạn!

5

URL thô của Github không được thiết kế để trở thành máy chủ lưu trữ web chung. Đẩy nội dung đó vào máy chủ phù hợp, như nói pages.github.com.

+2

Vâng, vấn đề với điều đó là nó đòi hỏi thêm công việc mỗi khi tôi thực hiện một cam kết để làm chủ để chuyển sang các chi nhánh trang & sao chép các tập tin trên. Tôi chỉ đang cố gắng tránh điều này vì nó có vẻ không cần thiết –

0

Tôi cũng đang cố gắng đạt được điều này. Tuy nhiên, tôi dường như không thể nhận được giải pháp từ @shelhamer để làm việc trong codebase của tôi. Dưới đây là post-commit kịch bản móc được cập nhật mà tôi sử dụng để làm cho nó làm việc:

#!/bin/sh 

WATCH_BRANCH="master" 
WATCH_FILES="jquery-imask-min.js" 
DEST_BRANCH="gh-pages" 

# bail out if this commit wasn't made in the watched branch 
THIS_BRANCH=$(git branch --no-color | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'); 
if [ "$THIS_BRANCH" != "$WATCH_BRANCH" ]; then 
    exit 0 
fi 

# only update if watched files have changed in the latest commit 
CHANGED_FILES=$(git show --pretty="format:" --name-only $WATCH_BRANCH) 
if $(echo "$CHANGED_FILES" | grep "^$WATCH_FILES$" -q); then 
    # checkout destination branch, then 
    # checkout latest version of each watched file and add to index 
    git checkout -q $DEST_BRANCH 
    git pull -q 
    SAVEIFS=$IFS 
    IFS=$(echo -n "|") 
    for file in $WATCH_FILES; do 
    git checkout $WATCH_BRANCH -- $file 
    git add $file > /dev/null 
    done 
    IFS=$SAVEIFS 
    # commit with a chance to edit the message, then go back to watched branch 
    LATEST_COMMIT=$(git rev-parse $WATCH_BRANCH) 
    git commit -m "Also including changes from $WATCH_BRANCH's $LATEST_COMMIT" 
    git push origin $DEST_BRANCH 
    git checkout -q $WATCH_BRANCH 
fi 

tôi phải cập nhật việc sử dụng grep để làm cho regex phù hợp thành công (-P không phải là một lựa chọn về việc thực hiện grep bao gồm trong Git Bash shell cho Windows), thêm git pullgit push origin $DEST_BRANCH. Oh, và tôi đã phải thêm một vỏ rỗng của các thư mục và các tập tin trước (có lẽ chỉ là các thư mục sẽ có sufficed?).

Vì điều này thực sự đang đẩy mạnh, tôi nghĩ tốt hơn là nên chuyển tập lệnh này thành tập lệnh sau khi nhận thay vì sau cam kết.Nếu không, bạn có thể đang đẩy mã đến các trang gh chưa bao giờ được đưa vào master [nếu bạn chọn không đẩy nó].

59

Bạn có thể thử sử dụng dịch vụ https://rawgithub.com/. Chỉ cần thay thế raw.github.com bằng rawgithub.com.

CẬP NHẬT

Rawgithub tại là Rawgit: https://rawgit.com/ và đã bổ sung thêm một cdn sản xuất là tốt.

+1

Vì trong trường hợp đó bạn đã sử dụng một trang web không được liên kết với github, bạn cũng có thể sử dụng http://cdnjs.com/ –

+0

Cảm ơn, rawgithub là hoàn hảo. –

+2

Ngoài ra hãy xem [raw.githack.com] (http://raw.githack.com). Ý tưởng là như nhau, nhưng nó là một giải pháp đồng bằng-nginx có nghĩa là nó sẽ hoạt động nhanh hơn một chút :) – neoascetic

6

Hãy xem raw.githack.com. Ý tưởng của dịch vụ này được lấy cảm hứng từ rawgit.com. Tôi chỉ nhận ra rằng việc sử dụng toàn bộ khung công tác (node.js + express.js) cho những điều đơn giản như yêu cầu proxy là quá tải và chỉ thực hiện các công cụ tương tự bằng cách sử dụng nginx.

Thay thế đoạn mã tên miền "githubusercontent" trong URL github/gist của bạn bằng "githack" và bạn đã hoàn tất!

Hơn nữa, nó hỗ trợ bitbucket.com - chỉ cần thay thế toàn bộ miền bitbucket bằng bb.githack.com.

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