2011-07-21 15 views
1

私は単純なブックマークレットを作成しています(これまでにこれをしたことはありません)。スクリプトはうまく実行されますが(今はあまり効果がありません)、埋め込まれるCSSスタイルシートはHTML。次のようにCSSがブックマークレットに適用されない

アクティベーションリンクは(ドメインが変更された)である:

<a href="javascript:(function(){document.head.appendChild(document.createElement('script')).src='http://www.mydomain.co.uk/cloudlr/app/js/cloudlr.js?rand=' + Math.floor(Math.random()*99999);})();">Do this</a> 

その後と呼ばれるスクリプトは次のとおりです。

if (typeof jQuery == 'undefined') { 

    appendjQuery(); 

} else { 

    jsVersion = $().jquery; 
    versionArray = jsVersion.split('.'); 

    if (versionArray[1] < 6) { 

     appendjQuery(); 

    } else { 

     runthis(); 

    } 
} 

function appendCSS() { 

    var cloudlrCSS = document.createElement('link'); 
    cloudlrCSS.type = 'text/css'; 
    cloudlrCSS.href = 'http://www.mydomain.co.uk/cloudlr/app/css/screen.css'; 
    cloudlrCSS.media = 'all'; 
    document.head.appendChild(cloudlrCSS); 

} 

function appendjQuery() { 

    var cloudlrJS = document.createElement('script'); 
    cloudlrJS.type = 'text/javascript'; 
    cloudlrJS.onload = runthis; 
    cloudlrJS.onreadystatechange = function() { 

     if (this.readyState == 'loaded' || this.readyState == 'complete') { 
      runthis(); 
     } 

    } 
    cloudlrJS.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js'; 
    document.head.appendChild(cloudlrJS); 
} 

function runthis() { 

    appendCSS(); 

    $(document).ready(function() { 

     $("img").each(function() { 
      var $this = $(this); 
      var imageWidth = $(this).width(); 
       $(this).before(imageWidth); 
     }); 

     var cloudlrOverlay = '<div id="cloudlr-content">This is some content.</div><div id="cloudlr-overlay"></div>'; 

     $("body").append(cloudlrOverlay); 

    }); 


} 

がうまくいけば、それはすべての非常に簡単です。

スクリプトはうまく実行されますが(jQuery)、CSSは適用されません。私が "生成されたソース"を見ると、CSSが正しく挿入され、ファイルへのリンクが機能していることがわかります。だから私は何が起こっているのか分からない。

私はこれが初めてで、ベストプラクティスとその解決策に関する追加の推奨事項を歓迎します。

多くのありがとう、 マイケル。

+0

あなたを助けることができると思い、このですか? –

+1

あなたは 'cloudlrCSS.rel = 'stylesheet';' –

+0

グレッグを設定しようとしました - それはそれに答えました!今すぐ動作します。誰が考えただろうか?おそらくそれはブラウザ特有のものでした。私はFirefox 5を使っていました。ありがとうございます。質問としてそれを書いて、私はあなたにポイントを与えます。世話をする。 –

答えて

1
$("img").each(function(i,n) { 
    var $this = $(n);//don't know why this is here but hey 
    var imageWidth = $(n).width(); 
     $(n).before(imageWidth); 
}); 

これはよくある間違いです...私は、これはどのようなブラウザ

+0

あなたのご意見ありがとうございます、私はそれを考慮に入れます。あなたがスタイルシートの問題に私を助けることができたらどうですか? –

+0

'$(this)).before(imageWidth);'前に要素を追加する前に要素の幅を追加することはできません...そうではありませんか? – Val