それは、ローカルファイルを参照するJavaScriptでstringByEvaluatingJavaScriptFromStringを使用することは可能ですか?

StackOverflow https://stackoverflow.com/questions/1893715

質問

私は、ローカルファイルを参照するjavascriptを実行するためにstringByEvaluatingJavaScriptFromStringを使用する(この場合はCSSファイルには、あまりにも潜在的にJSファイル)のデバイス上にある(文書にはフォルダ私は推測?)...

 NSString *theJS = [[NSString alloc]
 initWithString:@"javascript:(function()
{the_css.rel='stylesheet';
the_css.href='the_css.css';
the_css.type='text/css';
the_css.media='screen';}
)();"];

[webView stringByEvaluatingJavaScriptFromString:theJS];

どのように私はこの仕事を得るのでしょうか?私は

のように、外部CSSファイルを使用する場合は正常に動作します
the_css.href='http://www.website.com/the_css.css';
役に立ちましたか?

解決

HTMLをロードするときに

私は過去に何をやったか、このコードを使用している

NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:bundlePath];

[webView loadData:data MIMEType:@"text/html" textEncodingName:@"utf-8 " baseURL:baseURL];

これはあなたの相対URLが正しく動作するようになりますベースURLとしてバンドルの場所を通過します。もちろん、あなたがこの正確なloadDataメソッドを使用する必要はありません、さまざまなオーバーロードがあります。ただ、そこにbaseUrlを取得し、あなたが行くことが良いことがあります。

他のすべてが失敗した場合は、のようなものを使用することができます

NSString *path = [[NSBundle mainBundle] pathForResource:@"file.css" ofType:nil]]

そして、いくつかの文字列の置換または任意のページにそれを注入します。ビットハックいえます。

他のヒント

あなたはこのようにそれを行う必要があります。

NSString *cssPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"the_css.css"];
NSURL *baseURL = [NSURL fileURLWithPath:cssPath];


 NSString *theJS = [[NSString alloc]
 initWithFormat:@"javascript:(function()
{the_css.rel='stylesheet';
the_css.href='%@';
the_css.type='text/css';
the_css.media='screen';}
)();",baseURL];
[cssPath release];

[webView stringByEvaluatingJavaScriptFromString:theJS];

この問題を解決することを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top